Announcement

Collapse
No announcement yet.

ungültige Zeigeroperation

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ungültige Zeigeroperation

    <br>Vielleicht hat jemand einen Tip für mich. Ich bin ein etwas
    <br>größeres Programm am testen und es erscheint mir immer regel-
    <br>mäßig die Fehlermeldung 'ungültige Zeigeroperation'. Dies passiert
    <br>z.B. im Moment, wenn ich ein bestimmtes Formular zum 3.Mal schließe,
    <br>d.h. ich öffne das Formular, es werden ein paar Daten in einem GRID
    <br>angezeigt, ich schließe das Formular wieder. Beim 3.Mal Schließen
    <br>erscheint dann die Fehlermeldung.
    <br>Hat jemand irgendeinen Tip für mich, in welcher Richtung ich den
    <br>Fehler suchen kann?
    <p>Vielen Dank für eure Hilfe!
    <p>Olaf

  • #2
    Hallo,

    wenn <b>nicht</b> Delphi 5 verwendet wird, tritt dieser Fehler auf einem Rechner mit mehreren Prozessoren auf? Wenn ja, muss auf Delphi 5 gewechselt werden.

    Wird dabei die Laufzeitfehlermeldung 204 angezeigt oder ist der Fehlertext "ungültige Zeigeroperation" nur in einem Exception-Fenster zu sehen?

    Verwendet die Formular-Unit eigene Aufrufe im <b>Initialization</b>-bzw. <b>Finalization</b>-Abschnitt oder wird aus dieser Unit heraus auf andere Units bzw. auf globale Variablen zugegriffen? Wenn ja, würde ich zuerst hier nach der Ursache suchen.

    Letztendlich wird nichts anderes übrigbleiben, als Schritt für Schritt im Debugger den vollständigen Programmablauf bis zum Auslösen des Fehlers zu prüfen

    Comment


    • #3
      <br>Hallo Andreas Kosch, ich setze Delphi 4 C/S ein. Das Programm
      <br>wird nicht auf Rechnern mit mehreren Prozessoren eingesetzt.
      <br>Der Fehler tritt unabhängig vom Betriebssystem ein, also unter
      <br>WIN95, WIN98, WINNT4.0, jedoch nur in einem Exception-Fenster.
      <br>Mit dem Debugger habe ich soweit eingrenzen können, das vom
      <br>Formular das Ereignis DESTROY auftritt und dann erst der Fehler
      <br>erscheint (im CPU-Fenster erscheint die Fehleradresse bei <br>TObject.free), d.h. das Formular wird nicht aus dem Speicher <br>gelöscht,denn beim nächsten CREATE bekomme ich den Hinweis, das <br>das Formular schon existiert. Ich benutze keine eigenen <br>entwickelten Komponenten, sondern greife auf die Original-Delphi-<br>Komponenten sowie auf Fremdkomponeten (RX-Tools sowie <br>TADVStringGrid von TMS) zurück.
      <br>Ich benutze keine Einträge im Initialization-bzw. Finalization-
      <br>abschnitt, bentuze allerdings globale Variablen aus anderen UNITs.
      <p>Ola

      Comment


      • #4
        Hallo,

        angenommen, die Ursache für die Problem liegt bei den Formularen. Werden diese <br>
        a) automatisch erzeugt (in der Projektdatei), oder <br>
        b) erst im Programm bei Bedarf? <br>
        Wenn in der Antwort vom OnDestroy-Ereignis die Rede ist, gehe ich einmal davon aus, das b) zutrifft. Wie wird dann die Formularinstanz freigegeben: Über den Aufruf von <b>Release</b> oder <b>Free</b>? Was passiert, wenn diese beiden Aufrufe ausgetauscht werden. <br> Normalerweise sollte <b>Release</b> bei einem modalen Formular verwendet werden, um die anstehenden Botschaften aus der Warteschlange abarbeiten zu können, bevor die Instanz zerstört wird.

        Wenn es sich um nichtmodale Aufrufe (Show) handelt, wird <b>caFree</b> verwendet oder eine andere Technik

        Comment


        • #5
          <br>Hallo Andreas Kosch,
          <br>die Formulare werden bei Bedarf erstellt mit Show
          <br>und mit cafree wieder freigegeben.
          <p>Ola

          Comment


          • #6
            Hallo,

            in diesem Fall wird wohl nichts anderes übrigbleiben, als Schritt für Schritt einzelne Komponenten aus dem Formular zu entfernen (ich würde dabei mit den Fremdkomponenten anfangen). So kann man (hoffentich) den Übeltäter eingrenzen

            Comment


            • #7
              <br>Hallo Andreas Kosch,
              <br>Vielen Dank für deine Informationen, die mich indirekt zu dem
              <br>Fehler geführt haben. Allerdings hat nicht das Entfernen einzelner
              <br>Komponenten zum Ziel geführt, sondern das Entfernen von
              <br>Programmiercode. Der Fehler lag in folgender Zeile:
              <br>
              <br>TWinControl(controls[i]).tabstop:=false;
              <br>
              <br>Mit etwas geänderter Zeile auf:
              <br>
              <br>(controls[i] as TWinControl).tabstop:=false;
              <br>
              <br>erschien mir eine Fehlermeldung, da ich auch TLabels ansprach.
              <br>Nach der Programmkorrektur war auch der Fehler sowie andere
              <br>nicht nachvollziehbare Zugriffsverletzungen verschwunden.
              <br>
              <br>Vielen Dank nochmal.
              <br>
              <br>Ola

              Comment

              Working...
              X