Zum Inhalt springen

Xanatus

Mitglieder
  • Gesamte Inhalte

    3
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Xanatus

  1. Ich hab seit einer Weile mit den im Titel genannten Problemen zu kämpfen. Es handelt sich um eine große ziemlich komplexe C++ Multithread Server Anwendung. Momentan lass ich das Programm im Visual Studio Debugmodus laufen um mögliche Fehler zu finden. Der Server läuft in der Regel für 5 bis 10 Stunden stabiel und crasht dann irgendwann entweder mit einem "Heap Corruption detected" Error beim freigeben (delete) von Speicher oder mit einem unmöglichen Fehler z.B.: for(int x = 0; x < 9; x++) myObj[x]->doSomething(); // x ist jetzt auf einmal 537 und die Anwendung crasht. Die Fehler treten ziemlich zufällig auf und nur selten an den selben Stellen. Memory leaks kann ich nach einigen tests mit _CrtDumpMemoryLeaks() ausschliesen. Eigentlich deutet alles auf einen Bufferüberlauf hin, der den Stack und Heap zerschießt, nur weiss ich nicht wo ich anfangen soll zu suchen. Ich weiss das es einige Tools gibt, die dabei helfen können. Was ich mich nur frage ist, gibt es irgend ein Tool das ich mit dem Visual Studio Debugger zusammen nutzen kann? Ich suche sowas wie Full PageHeap debugging innerhalb der Entwicklungsumgebung so das ich mich möglichst nicht mit den Crash Dumps rumschlagen muss. Bevor ich das nämlich tue, wollte ich mal nachgefragt haben ob ich mir den Zeitaufwand auch sparen könnte. Hattet ihr schonmal so ein Problem? Wie geht ihr sonst damit um?
  2. das ganze konzept wirkt schwachsinning, aber ich helf dir trotzdem mal. die for-schleife sollte so aussehen: for(i=0;i < 55;i++) { if(text1[i] == 'p' && text1[i+1] == 'o' && text1[i+2] == 'k' && text1[i+3] == 'e' && text1[i+4] == 'r') { text2[j]= 'p'; text2[j+1]= 'o'; text2[j+2]= 'k'; text2[j+3]= 'e'; text2[j+4]= 'r'; } }
  3. Das ganze ist einfach ganz logisch zu erklären. Nachdem dein Programm in Maschienencode umgewandelt (compiliert) wurde, gibt es keine klassen mehr. aus class Bla { public: void ausgeben(void) { cout << text << "\n"; } } wird void ausgeben(void* this) { cout << this->text << "\n"; } und aus blubb->ausgeben(); wird ausgeben(blubb); ist logisch das bei folgendem kein Fehler entsteht, egal was du übergibts, oder? void ausgeben(void* this) { cout << "Hallo" << "\n"; } Das ist kein Fehler, ds ist einfach so ;-) Im Regelfall wird es aber selten vorkommen, dass deine Klasse über Methoden verfügt, die nicht auf den Klassenspeicher zugreifen. HTH, Uwe

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...