Kampfkartoffel Geschrieben 6. Juni 2006 Teilen Geschrieben 6. Juni 2006 Hallo nochmal, ich habe noch mal ein ähnliches Problem, wie bei meinem PropertySheet-Thread. Ich habe einen Hauptdialog, der 2 andere Dialoge aufruft. Da zwischen den Dialogen ein Datenaustausch stattfinden soll, möchte ich wieder über eine externe Datenklasse gehen. Ich habe alles so erstellt wie bei meinem PropertySheetprogramm und der Compiler gibt keinen Fehler. Wenn ich jedoch das Programm starte, sagt er mir sobald ich auf die Datenklasse zugreifen möchte: Zugriffsverletzung-Leseposition! Mein Code: Programm2.h #include "resource.h" // Hauptsymbole #include "Daten.h" ... CDaten *pDaten, mDaten; Programm2.cpp #include "stdafx.h" #include "Programm2.h" #include "Dialog1.h" #include "Dialog3.h" #include "Programm2Dlg.h" ... CDialog1 D1; CDialog3 D3; CProgramm2Dlg HD; pDaten=&mDaten; D1.pDaten=&mDaten; D3.pDaten=&mDaten; HD.pDaten=&mDaten; als Beispiel: Programm2Dlg.h #pragma once #include "afxwin.h" #include "afxtempl.h" ... CDaten *pDaten; Programm2Dlg.cpp #include "stdafx.h" #include "Programm2.h" #include "Dialog1.h" // Da der Hauptdialog, Dialog1 und Dialog3 modal aufruft #include "Dialog3.h" // stehen sie vor dem Hauptdialog #include "Programm2Dlg.h" #include ".\programm2dlg.h" Wenn ich mir den Programmablauf im Debugger anschaue, sehe ich, dass er bei der Adressenzuweisung in Programm2.cpp (HD.pDaten=&mDaten) immer dieselbe Adresse vergibt, wenn ich jedoch in der Klasse von der Variablen HD bin, dann hat der Pointer "pDaten" die Adresse nicht übernommen und zeigt an, ihm wäre keine Adresse zugewiesen worden. Ich schicke also im Programm2.cpp dieselbe Adresse an alle Pointer und diese zeigen sie mir dort auch an. Aber in den Klassen selbst ist sie nicht mehr da. Ich habe zwar den Code von meinem Propertysheetprogramm vorliegen, finde aber keinen Fehler. Weiss jemand woran das liegen könnte? Gruß KK Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 6. Juni 2006 Teilen Geschrieben 6. Juni 2006 Vermutlich benutzt du nicht diese Instanzen, sondern erstellst irgendwo andere. Den globalen Zeiger pDaten brauchst du übrigens nicht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kampfkartoffel Geschrieben 6. Juni 2006 Autor Teilen Geschrieben 6. Juni 2006 Hallo Klotzkopp, gibt es irgendein Hilfstool, dass mir bei meiner Suche helfen kann? Die Instanzen mit denen ich arbeite, erstelle ich eigentlich nur einmal. Wenn dies so wäre, müsste das Programm jedoch die Adresse weitergeben und einwandfrei laufen, das sehe ich schon ein. Ich habe nur keine Ahnung wie ich jetzt weiter vorgehen soll. Ich habe in jeder Klasse einen Pointer zu CDaten erstellt. Ich finde halt auch keinen Unterschied zu meinem PropertySheet-Programm. Kann man sich in einem Hilfstool anzeigen lassen, wann das Programm etwas erstellt, um zu sehen wann er die anderen Instanzen erzeugt? Und ja, den globalen Zeiger habe ich nur erstellt um zu sehen ob das mit derselben Adresse passt. Muss zwar logisch so sein, aber zur Zeit ist Kontrolle für mich noch besser Mit Dank und Gruß KK Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 6. Juni 2006 Teilen Geschrieben 6. Juni 2006 Wenn der Zeiger in einer Instanz von CProgramm2Dlg nicht passt, dann benutzt du wohl irgendwo nicht HD, sondern erstellst noch ein Objekt. Ich tippe auf die InitInstance-Methode der App-Klasse. Du könntest natürlich einfach mal nach "CProgramm2Dlg " suchen (ohne Anführungszeichen, aber mit dem Leerzeichen am Ende). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kampfkartoffel Geschrieben 6. Juni 2006 Autor Teilen Geschrieben 6. Juni 2006 Hallo Klotzkopp, mann, jetzt habe ich Idiot verstanden, was Du mir mitteilen wolltest. Da ich pDaten über HD zugewiesen habe, dann aber in Programm2.cpp den Dialog mit einer anderen Variable über DoModal aufgerufen habe, hat er natürlich nicht mehr die Adresse der Zuweisung, da es sich ja um eine ganz andere Variable handelt. Jetzt sehe ich im Debugger auch, dass der Pointer dieselbe Adresse hat. Dank Dir. Gruß KK Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.