Liebe Experten,
(Sorry, etwas längere Vorgeschichte zur Erklärung)
ich habe seit einigen Jahren ein C++-Programm am Wickel, das aus einigen 1000 Sourcezeilen besteht. Es wurde bisher unter Linux 2.4 und Solaris 8 compiliert, jeweils mit gcc 3.3. Läuft unter beiden OSsen auch prächtig und ohne Symptome.
Jetzt will ich das Programm mit MinGW unter Windows bauen. Das Compilieren geht auch ohne Fehlermeldung, trotz "-W -Wall". Beim Ausführen unter WinXP knallt es aber sofort am Start mit einer SIGSEGV. gdb hilft nicht weiter, deswegen habe ich auf Anraten eines Bekannten unter Linux mal valgrind darauf angesetzt (Version 2.2).
Valgrind liefert jetzt Fehlermeldungen, die ich schlicht nicht verstehe - sprachlich schon, inhaltlich nicht. Z.B. ist die allererste Anweisung nach "main(..." die hier:
unsigned int MAXTEST=1000;
und darüber motzt valgrind schon:
==4138== Invalid write of size 4
==4138== at 0x804ED59: main (runner.cc:22)
==4138== by 0x4030E856: __libc_start_main (in /lib/libc.so.6)
==4138== by 0x8049140: (within /home/micha/e5/runner)
==4138== Address 0xBFFFF32C is not stack'd, malloc'd or free'd
Außerdem wird jede Zeile moniert, die eine der strxxx()- bzw. memxxx()-Standardfunktionen aufruft. Da ist dann die Meldung
==4084== Invalid read of size 4
==4084== at 0x8050266: (within /home/micha/e5/runner)
==4084== by 0x1BA12856: __libc_start_main (in /lib/libc.so.6)
==4084== by 0x8049120: (within /home/micha/e5/runner)
==4084== Address 0x5290FE14 is on thread 1's stack
Statt "read" gibt's natürlich auch "write" in der ersten Zeile dieses Meldungsblocks. Da das Programm willentlich keinerlei Threads benutzt, bin ich auch hier etwas konsterniert...
Kann mir jemand das Phänomen erklären, bitte?
Ciao, Miq.
(Sorry, etwas längere Vorgeschichte zur Erklärung)
ich habe seit einigen Jahren ein C++-Programm am Wickel, das aus einigen 1000 Sourcezeilen besteht. Es wurde bisher unter Linux 2.4 und Solaris 8 compiliert, jeweils mit gcc 3.3. Läuft unter beiden OSsen auch prächtig und ohne Symptome.
Jetzt will ich das Programm mit MinGW unter Windows bauen. Das Compilieren geht auch ohne Fehlermeldung, trotz "-W -Wall". Beim Ausführen unter WinXP knallt es aber sofort am Start mit einer SIGSEGV. gdb hilft nicht weiter, deswegen habe ich auf Anraten eines Bekannten unter Linux mal valgrind darauf angesetzt (Version 2.2).
Valgrind liefert jetzt Fehlermeldungen, die ich schlicht nicht verstehe - sprachlich schon, inhaltlich nicht. Z.B. ist die allererste Anweisung nach "main(..." die hier:
unsigned int MAXTEST=1000;
und darüber motzt valgrind schon:
==4138== Invalid write of size 4
==4138== at 0x804ED59: main (runner.cc:22)
==4138== by 0x4030E856: __libc_start_main (in /lib/libc.so.6)
==4138== by 0x8049140: (within /home/micha/e5/runner)
==4138== Address 0xBFFFF32C is not stack'd, malloc'd or free'd
Außerdem wird jede Zeile moniert, die eine der strxxx()- bzw. memxxx()-Standardfunktionen aufruft. Da ist dann die Meldung
==4084== Invalid read of size 4
==4084== at 0x8050266: (within /home/micha/e5/runner)
==4084== by 0x1BA12856: __libc_start_main (in /lib/libc.so.6)
==4084== by 0x8049120: (within /home/micha/e5/runner)
==4084== Address 0x5290FE14 is on thread 1's stack
Statt "read" gibt's natürlich auch "write" in der ersten Zeile dieses Meldungsblocks. Da das Programm willentlich keinerlei Threads benutzt, bin ich auch hier etwas konsterniert...

Kann mir jemand das Phänomen erklären, bitte?
Ciao, Miq.