Problem mit STL Vector unter 64bit
-
Hallo,
ich versuche ein bestehendes Programm von einer 32bit- auf eine 64bit-Umgebung zu portieren. Ich benutze dabei Visual Studio 2010 Professional.
Ich bin auch schon soweit gekommen, dass das Programm sich ohne Fehlermeldungen kompilieren lässt, aber leider stürzt das Programm mit einem nichtssagenden Fehlercode ab und lässt mich noch nichtmal vernünftig debuggen...Ich habe mittlerweile durch schrittweises Auskommentieren die verantwortliche Programmzeile ausmachen können:
db_connections.push_back(new_connection)
Die Definition des Vektors sieht wie folgt aus:
std::vector<DbConn*> DbConn::db_connections=std::vector<DbConn*>();
Wenn man die Zeile mit "push_back" auskommentiert funktioniert es also. Das merkwürdige ist aber vor allem, dass der gleiche Befehl an anderer Stelle ebenfalls aufgerufen wird, dort aber funktioniert.
Wenn ich mit dem 32bit-Compiler kompiliere funktioniert es auch überall.Muss ein Vector unter 64bit noch anders gehandhabt werden als unter 32bit?
Ich bin für jede Hilfe dankbar...
-
Da ist was anderes faul. Was für einen Fehler bekommst Du?
Einen Heap-Fehler?
Hast Du mal vor diesem push_back Deinen Heap kontrolliert?
_heapChk
http://msdn.microsoft.com/en-us/library/hk1k7x6x(VS.80).aspx
-
Soo, erstma sorry dass ich so lange nicht mehr reagiert habe aber hatte zwischendurch andere Dinge zu tun.
Konnte mittlerweile malden Heap überprüfen, der liefert aber _HEAPOK als Ergebnis.
Noch irgendwelche anderen Ideen?
-
Wenn man sich das ganze im Debug Modus anguckt und das Programm bei der Exception unterbricht, springt Visual Studio an folgende Stelle in der <vector.h> Datei der STL...
_Myt& operator+=(difference_type _Off) { // increment by integer _SCL_SECURE_VALIDATE(this->_Has_container()); _SCL_SECURE_VALIDATE_RANGE( _Myptr + _Off <= ((_Myvec *)(this->_Getmycont()))->_Mylast && _Myptr + _Off >= ((_Myvec *)(this->_Getmycont()))->_Myfirst); _Myptr += _Off; return (*this); }
Der Pfeil steht auf Zeile 3 !
Vielleicht hilft das ja weiter?
-
und noch etwas ist mir aufgefalen...
Ersetzt man push_back(...) durch clear() kommt ebenfalls eine Exception, die der Debug Modus zwar auf eine andere Zeilennummer in der <vector.h> zurückführt, in der jedoch ebenfallsthis->_Has_container()
steht. Ich überprüfe jetzt einmal die Initialisierung des Vectors.
-
Ich tippe mal auf Speicher-Überschreiber...
Aktiviere doch mal den Page-Heap (Start with Application-Verifiyer) oder gflags (in den Debugging-Tools for Windows).
-
Geht das auch mit DLLs? Mein Projekt ist nämlich nicht Stand-Alone sondern wird von AutoCad geladen, deswegen wird beim Debuggen auch immer AutoCad gestartet. Der Application-Verifier wird doch normalerweise über Debug->Start with Application Verifier gestartet oder?
Habe gerade festgestellt, dass es funktioniert wenn ich mit resize() den Vector um 1 vergrößere und den Eintrag manuell an den letzten Index schreibe.