R6034 und Vector-Probleme
-
Hallo,
ich habe hier ein sehr großes Projekt, das von einem Kollegen geschrieben wurde, der nicht mehr bei uns arbeitet.Bis jetzt läuft es einigermaßen passabel.
Habe es auch erweitert, indem ich von mir geschriebene libs eingebunden habe. Da diese libs sehr viel Unterlibs hat muss bei einer kleinen Änderung in einer lib alle darüber liegenden, die diese verwenden, auch neu kompiliert werden.
Das ist nicht immer einfach, da alle relevanten zu finden.Um dies konfortabler zu machen wollte ich nun in dieses große Projekt meine ganzen libs als unter Projekte hinzufügen und die Projektabhänigkeiten richtig setzen, so dass automatisch bei einer Änderung alles in richtiger Reihenfolge kompiliert wird (ich nutze Visual Studios 2008).
Lies sich auch kompilieren.
Beim Starten kommt allerdings die Fehlermeldung
R6034: Eine Anwendung hat versucht, die C-Laufzeitbibliothek nicht ordnungsgemäß zu laden. Wenden Sie sich für weitere Informationen an das für die Anwendung zuständige Supportteam.Ich habe anschließend in den Projekteigenschaften unter Linker->Manifestdatei die Option "Manifest generieren" auf "Ja" gestellt - mich hat es hier shcon gewundert, dass ich da überhaupt was ändern muss. Vorher ging es ja...
Nun startet er zumindest, so dass ich in den Haltepunkt direkt hinter dem Hauptkonstruktor reinläuft.
Ich steppe durch bis ich zu einem Vektor komme.
Zusammen gefasst sieht das aktuelle Codestück so aus:#include <vector> using namespace std; vector<int> myVec; myVec.push_back(0815);
Wenn er das push_back ausführen soll, wird folgende Fehlermeldung geworfen:
_Pvector == NULL || (((_Myvec *)_Pvector)->_Myfirst <= _Ptr && _Ptr <= ((_Myvec *)_Pvector)->_M<lastWenn ich mir den Inhalt des Vector "myVec" anschaue kommt folgendes:
Name: myVec
Wert: [3863365190](...,...)Es wurde mit ihm bis jetzt rein gar nichts gemacht.
Ich weiß im Moment nicht weiter.
Habt ihr einen Tipp?
Danke
-
1. Gibt's nicht so etwas wie Makefiles für VC++?
2. Zu deinem Fehlercode: Das ist so unvollständig, dazu kann man gar nichts sagen. Das ist ja noch nicht einmal mehr korrekter Code, so sehr hast du gekürzt.
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x) in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Sind die libs alle mit der gleichen Runtime gebaut, also alle /MT oder /MD?
-
SeppJ schrieb:
1. Gibt's nicht so etwas wie Makefiles für VC++?
Mit Makefiles kenne ich mich leider nicht aus
SeppJ schrieb:
2. Zu deinem Fehlercode: Das ist so unvollständig, dazu kann man gar nichts sagen. Das ist ja noch nicht einmal mehr korrekter Code, so sehr hast du gekürzt.
Ich weiß nicht was genau relevant ist.
Da ich weiß, dass es bei push_back kommt die Fehlermeldung, habe ich das hingeschrieben, was in dem Bezug gemacht wurde.
Also eigentlich rein gar nichts.Ich habe auch dort im Konstruktor noch einmal
vector<int> test;
geschrieben. Direkt danach ist der Wert laut Beobachtungstool [3863365190](...,...) (oder eine ähnliche Zahl in dieser Ordnung)
brotbernd schrieb:
Sind die libs alle mit der gleichen Runtime gebaut, also alle /MT oder /MD?
ja, alle sind mit /MD kompiliert
-
aus interesse habe ich nun folgendes gemacht:
vector<string> a; a.push_back("bla"); vector<int> b; b.push_back(2);
a funktioniert wunderbar. bei b kommt das oben beschriebene Phänomen
-
hat keiner Tipps?
im Release Modus kann ich das Programm ohne Probleme kompilieren und starten. Im Debug Modus habe ich nach wie vor die oben beschriebenen Probleme
-
Vermutlich mischt Du CRT Versionen oder machst noch was mit einer DLL, wo dann dieser Vector verwendet wird und die CRT passt nicht zusammen...
-
Jochen Kalmbach schrieb:
wo dann dieser Vector verwendet wird
da ich testweise direkt im Konstruktor den Vector angelegt habe und eine Zeile danach der Vector kaputt war, kann er nicht in einer fremden DLL verändert worden sein.
Ich habe noch bisschen wieter getestet. Vektoren mit dem Typ int und double gehen nicht, short, float und string dagegen schon.Gibt es in Visual Studios 2008 eine Möglichkeit zu sehen, welche .dll eingebunden wird? Ich kenne bis auf eine dll keine des Projekts. Da es aber so extrem groß ist kann ich da aber gut was übersehen.
Und kann ich mir bei VS anzeigen lassen, welche exakte lib gerade beim Kompilieren eingebunden wurde? Da die SVN-Struktur mal umgestellt wurde kann es sein, dass irgend wo eine veraltete lib rumliegt die verwendet wird. Das sehe ich wzar als sehr unwahrscheinlich an, dass dies der Fall ist aber wenn man sich die beim Kompilieren verwendeten .libs auflisten lassen kann, könnte ich das auf jeden Fall ausschließen.