socket klasse c++
-
0xcdcdcdd5 sieht mir doch sehr nach einem magic value (0xcdcdcdcd + offset) aus. Der Kaffeesatz in meiner Tasse sagt, dass theta mit seiner Vermutung goldrichtig liegt und du gar kein konkretes Objekt vorliegen hast, sondern bloß irgendwelche uninitialisierten Zeiger.
-
dashu schrieb:
CNetworkSocketServer* m_pServer;// das steht in einer .h
m_pServer->WinsockInit();
m_pServer->InitServer(1337);Wo steht
m_pServer = ... ?
-
oh mann ich hatte das echt vergessen
vielen dank.m_pServer = new CNetworkSocketServer();
würde reichen ? ich test gleich mal.
Edit: Ja passt jetzt.
danke leuteEdit2: Seppj du hast mir ja auch noch einige sachen geschrieben auf die ich sonst noch so achten sollte. ich kuck mir das mal genau an und komm vielleicht mal darauf zurück.
wenn ich sowas mal wieder sehe 0xcdcdcdcd hat das dann meist immer was damit zu tun das ich den speicher vorher nicht alloziert habe ? Mir ist das schon aufgefallen und ich hab auch danach gegoogelt gestern aber was hat das denn jetzt genau zu bedeuten ?
-
dashu schrieb:
oh mann ich hatte das echt vergessen
vielen dank.m_pServer = new CNetworkSocketServer();
würde reichen ?
Fast, delete nicht vergessen.
-
Wie wäre es mit einem Zeiger, der automatisch ein delete durchführt? Oder noch besser: Einer gründlichen Prüfung, ob man überhaupt einen Zeiger benötigt. Und einer Korrektur der anderen genannten verdächtigen Stellen im Code (die höchstwahrscheinlich Fehler sind)? Variablendefinitionen im Header wurden auch noch nicht angesprochen.
-
oh mann ich hatte sogar schon das delete in meiner Fini methode :P.
Ich war gestern glaub ich einfach müde. Ich kuck mir das aufjedenfall noch an Seppj.
Edit: Uff ich mag sockets irgendwie nicht
hatte auch schon soviel fehler mit den includes am anfang weil ich windows.h und winsock2.h gebraucht hab und das riesen probleme gemacht hat.
-
Das sind sehr allgemeine Designprinzipien in C++, die du hier verletzt, nicht speziell mit Sockets. Es geht um Kontrolle von Ressourcen, Verantwortung für Ressourcen, Objektlebensdauer. Die Macher von C++ haben sich dafür sehr mächtige und trotzdem einfach zu benutzende Methoden ausgedacht, wie man bei normaler Nutzung gar keine Fehler mehr machen kann. Du hingegen verwaltest die Ressourcen in einer Art wilder Mischung aus C- und Java-Stil. Beide funktionieren in C++ nicht wirklich und führen dann zu solchen vermeidbaren Fehlern wie hier im Thread, sind dabei aber sogar noch umständlicher zu programmieren.
Mehr erfährst du in (guten) C++-Büchern. Oder als Einstig ein paar Stichworte:
http://en.wikipedia.org/wiki/RAII
http://en.wikipedia.org/wiki/Rule_of_three_(C%2B%2B_programming)
http://en.wikipedia.org/wiki/Smart_pointer
http://en.wikipedia.org/wiki/Automatic_variable
http://en.wikipedia.org/wiki/Scope_(programming)
(Das ist jetzt zugegebenermaßen überwältigend viel Text, da die Lexikonartikel eben sehr ausführlich sind und nicht als Lehrbuch gedacht sind. Aber es zeigt hoffentlich, was möglich ist, wie es ungefähr aussehen sollte und was die wichtigen Begriffe sind. Siehe meine Signatur für Buchempfehlungen, die das Thema didaktisch besser erklären.)
-
Danke Seppj
ich les es gerade. Hatte wirklich noch nie von der Rule of Three gehört :o
-
dashu schrieb:
wenn ich sowas mal wieder sehe 0xcdcdcdcd hat das dann meist immer was damit zu tun das ich den speicher vorher nicht alloziert habe ? Mir ist das schon aufgefallen und ich hab auch danach gegoogelt gestern aber was hat das denn jetzt genau zu bedeuten ?
Erster (!) Hit bei Google: http://www.microsoft.com/msj/1198/c/c1198.aspx
0xCDCDCDCD is a debugging value that comes from the bowels of the C runtime library. When you allocate a block of memory in a debug build, it's initialized to this spurious value in the hope of catching bugs. 0xCDCDCDCD is non-NULL and is never a valid memory pointer.
Wobei es noch mehr solche Patterns gibt, eine gute Übersicht findest du hier:
http://stackoverflow.com/questions/127386/in-visual-studio-c-what-are-the-memory-allocation-representations
-
der untere link ist spitze
vielen dank