Zeiger die zweite
-
Hallöchen an alle!
In einer dialogbasierten Anwendung habe ich die Klasse CMySocket von CAsyncSocket abgeleitet. In der Dialogklasse definiere ich einen Zeiger auf CMySocket:
[/cpp] CMySocket* m_pUDPSocket;
[cpp]Wie im MSDN-Beispielprog.
Die Headerdatein sind richtig eingebunden (Anzahl und Reihenfolge). An der Reihenfolge schien es gestern gehapert zu haben!
Durch den Compiler geht das Prog. Will ich es aber starten, wird es sofort beendet und der Zugriffsverletzung wurde festgestellt.
Wer kann mir sagen, was ich beachten muß?
THX Markus
-
bißchen wenig info.
wo stellst du dir instanz von CMySocket her? lebt das objekt noch? wo stürzt er genau ab?
-
Hallo elise!
Das Erstellen einer Instanz in der Art wie:
CMySocket MyObjekt;
habe ich nicht gefunden. Ist das notwendig, wenn man mit Zeigern arbeitet?
Diesen Code habe ich gefunden:class CStarDustUDPDlg : public CDialog { // Konstruktion public: CMySocket* m_pUDPSocket; CStarDustUDPDlg(CWnd* pParent = NULL); // Standard-Konstruktor // Dialogfelddaten //{{AFX_DATA(CStarDustUDPDlg) enum { IDD = IDD_STARDUSTUDP_DIALOG }; CString m_strReceive;
Nunja, so wie du siehst bin ich kein Profi
In gesamten Beispielprog wird derart gearbeitet:
// CMySocket member functions void CMySocket::OnAccept(int nErrorCode) { OutputDebugString("CMySocket::OnAccept\n"); CAsyncSocket::OnAccept(nErrorCode); }
-
mstank schrieb:
Hallo elise!
habe ich nicht gefunden. Ist das notwendig, wenn man mit Zeigern arbeitet?ein zeiger ist eine variabel vom datentyp zeiger, gemeinhin 4 byte groß, die zur aufnahme eine adresse "geboren" wurde.
die adresse bekommst du über entweder einen adressoperator (&) oder -wenn auf dem heap- über new.
dann erst legst du eine instanz deiner klasse an, und der zeiger soll wahrscheinlich auf diese instanz zeigen.hmm, vermutungsweise stürzt dein programm ab, weil du kein objekt alloziert hast.
-
Der Debuger zeigt in der CStarDustUDP::InitInstance
auf die Zeile: m_pMainWnd=&dlg;
Enable3dControlsStatic(); // Diese Funktion bei statischen MFC-Anbindungen aufrufen #endif CStarDustUDPDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK)
Wer kann mir weiter helfen?
-
elise, du verwirrst mich
hmm, vermutungsweise stürzt dein programm ab, weil du kein objekt alloziert hast.
Ein Objekt dieser Klasse erzeugen verstehe ich aber allozieren...
Knnst du mir sagen, wie ich vorgehen soll? Am besten so, daß auch ein Begriffstutziger was versteht.
Ich suche mal etwas im Debuger, vieleicht finde ich mehr?
Markus
-
Sowas habe ich auch noch gefunden:
Geladene Symbole für "C:\WINDOWS\system32\MSVCRTD.DLL"
"C:\WINDOWS\system32\gdi32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.?????
-
Elise meint bestimmt, dassdu irgendwo ein Objekt davon in den Speicher packen musst.
Das geht meistens mit new.Also:
m_pUDPSocket = new CMySocket;
Oder so ähnlich.
Sonsthast du nur einen nicht initialisierten Zeiger, der wild im Speicher rumzeigt.
-
Hallo!
Das habe ich nun verstanden! Glaube ich
Jetzt geht es an die Problemlösung.
Danke Euch beiden
Gruß Markus