Stapelüberlauf Ausnahme vor main ()

8

Das ist meine erste Frage hier auf Stackoverflow, also werde ich versuchen, spezifisch zu sein. Ich habe die Foren nach verwandten Themen durchsucht, aber kein Glück. Jedenfalls geht hier:

Ich verwende Visual Studio 2005. Ich habe eine Stapelüberlauf-Ausnahme festgestellt: Nicht behandelte Ausnahme bei 0x775715de in IHR.exe: 0xC00000FD: Stapelüberlauf. , wenn ich versuche, mein Projekt zu debuggen. Der Aufruf-Stack hilft nicht, da er bei ntdll.dll stoppt, bevor er sogar die Funktion main () aufruft.

Zuerst vermutete ich, dass es sich um eine Kompilierungseinstellung handeln könnte, aber wenn ich die auf meinem Computer kompilierte ausführbare Datei an einen zweiten Computer sendete, konnte es gut laufen, es lief einfach nicht auf meinem Computer.

Das Gleiche passiert in umgekehrter Reihenfolge, ich habe die ausführbare Datei auf dem zweiten Computer kompiliert, da könnte es gut laufen. Aber als ich versuchte, die ausführbare Datei auszuführen, die auf dem zweiten Computer auf meinem Computer kompiliert wurde, konnte es nicht ausgeführt werden. Alles was auftauchte war eine leere Eingabeaufforderung und eine Windows-Nachricht, die darauf hinwies, dass das Programm nicht reagierte.

Ich verwende Windows 7 Professional SP1, 64 Bit. Der andere Computer hat die gleiche Betriebssystemversion. Aufgrund der Firmenrichtlinien kann ich hier keinen Quellcode posten, aber ich denke nicht, dass es etwas mit dem Quellcode zu tun hat. Ich vermute, dass es ein Problem in der Laufzeitumgebung sein könnte. Schätze jede Hilfe. Danke.

Hier ist alles, was auf dem Call-Stack ist:

%Vor%

Dank des Vorschlags von @ WhozCraig habe ich es geschafft, auf dem Aufruf-Stack eine aussagekräftigere Nachricht zu erhalten. Immer noch ratlos.

  

IHR.exe! _mbscmp (const vorzeichenloses Zeichen * s1 = 0x00fe8c10, const vorzeichenloses Zeichen * s2 = 0x00fe8c10) Zeile 84 + 0xf Bytes
      IHR.exe! _mbscmp (const unsigned Zeichen * s1 = 0x00fe8c10, const unsigned Zeichen * s2 = 0x00fe8c10) Zeile 84 + 0xf Bytes
      IHR.exe! Strcmp (const Zeichen * _s1 = 0x00fe8c10, const Zeichen * _s2 = 0x00fe8c10) Zeile 1646 + 0x2b Bytes
      IHR.exe! _mbscmp_l (const unsigned Zeichen * s1 = 0x00fe8c10, const unsigned Zeichen * s2 = 0x00fe8c10, localeinfo_struct * plocinfo = 0x00000000) Zeile 58 + 0xd Bytes
      IHR.exe! _mbscmp (const unsigned Zeichen * s1 = 0x00fe8c10, const unsigned Zeichen * s2 = 0x00fe8c10) Zeile 84 + 0xf Bytes
      IHR.exe! Strcmp (const Zeichen * _s1 = 0x00fe8c10, const Zeichen * _s2 = 0x00fe8c10) Zeile 1646 + 0x2b Bytes

hier sind einige mehr, die zu dem Stapel über

führen %Vor%
  

IHR.exe! setlocale (int _category = 0, const char * _locale = 0x00000000) Zeile 826 + 0x1b Byte
      IHR.exe! Std :: _Lokinfo :: _LocInfo_code (Std :: _Locinfo * pLocinfo = 0x0018f8f8, const char * locname = 0x00ea591c) Zeile 192 + 0x9 Bytes
      IHR.exe! Std :: _ Locinfo :: _ Locinfo (const char * _Pch = 0x00ea591c) Zeile 78 + 0xd bytes       IHR.exe! Std :: ctype :: ctype (const kurz * _Tabelle = 0x00000000, bool _Deletetable = false, unsigned int _Refs = 0) Zeile 1740 + 0x10 Bytes
      IHR.exe! Std :: ctype :: _ Getcat (const std :: Gebietsschema :: Facette * * _Ppf = 0x0018fbd8) Zeile 1760 + 0x4d Bytes       IHR.exe! Std :: use_facet & gt; (Konstante std :: locale & amp; _Loc = {...}) Zeile 478 + 0x9 Bytes       IHR.exe! Std :: basic_ios & gt; :: erweitern (char _Byte = '') Zeile 124 + 0x34 Byte
      IHR.exe! Std :: basic_ios & gt; :: init (std :: basic_streambuf & gt; * _Strbuf = 0x00ff7908, bool_Istd = false) Zeile 135 + 0xa Bytes
      IHR.exe! Std :: basic_ostream & gt; :: basic_ostream & gt; (std :: basic_streambuf & gt; * _Strbuf = 0x00ff7908, bool_Istd = false) Zeile 53
      IHR.exe! Std :: 'dynamischer Initialisierer für' cout '' () Zeile 13 + 0x16 Bytes       IHR.exe! _initerm (void (void) * * pfbegin = 0x00e8d10c, void (void) * * pfend = 0x00e9dca0) Zeile 855       IHR.exe! _cinit (int initFloatingPrecision = 1) Zeile 293 + 0xf Bytes
      IHR.exe! tmaineCRTStartup () Zeile 310 + 0x7 Byte
      IHR.exe! MainCRTStartup () Zeile 196
      kernel32.dll! @ BaseThreadInitThunk @ 12 () + 0x12 Bytes
      ntdll.dll!
RtlUserThreadStart @ 8 () + 0x27 Bytes
      ntdll.dll!
_RtlUserThreadStart @ 8 () + 0x1b Byte

Es ruft wiederholt strcmp, mbscmp, mbscmp_l auf, bis es eine Stapelüberlauf-Ausnahme erreicht.

Update (11. April 2013): Ich habe die Zeile gefunden, die das Problem verursacht, bin aber immer noch völlig ahnungslos, warum es das verursacht. Es ist die Verwendung eines strcmp.

%Vor%

Wenn dieser strcmp auskommentiert wurde. Das Programm ist nicht abgestürzt. Irgendwelche Ideen oder Erfahrungen mit einem solchen Problem? Das gleiche Programm läuft auf anderen Rechnern immer noch einwandfrei, stürzt aber aufgrund dieser Leitung nur auf meinem Rechner ab. Andere strcmp wird im gesamten Programm ohne Problem verwendet. Danke

    
mikevil14rin 15.03.2013, 06:40
quelle

1 Antwort

2

Wahrscheinlich haben Sie globale / statische Variablen und versuchen, sie zu initialisieren, bevor Sie main ausführen. Wahrscheinlich ist die Reihenfolge der tatsächlichen Initialisierung nicht das, was Sie erwarten, als ob Sie sie in verschiedenen Dateien haben, es gibt keine Möglichkeit zu sagen, in welcher Reihenfolge sie erstellt werden sollten.

Entweder entfernen Sie diese Variablen oder ordnen sie in derselben Datei an.

    
Valeri Atamaniouk 15.03.2013 20:39
quelle

Tags und Links