Fehler bei vector::resize, Bug im VS?
-
Also irgendwie hatte das VS 2005 schluckauf.
Ich hab noch ein bisschen rumgetestet, mal die Optimierung ausgeschalten, dann wieder hinzugenommen und jetzt auf einmal gehts (anscheinend), einfach so. Sind dieselben EInstellungen, wie wo der Fehler aufgetreten ist.Sehr seltsam, naja mal schauen wie lange es hält ... .
-
Kann tatsächlich sein, das deine statische Lib noch "ungültig" war. "Projekt bereinigen" kann da schon mal helfen. Durch deine "optimierungs"-Änderung hat sich das aber folglich selbst nochmal bereinigt.
-
So ok, jetzt tritt der Fehler wieder auf oO
Ich habe dann nochmal beide Projekte bereinigt und neu erstellt. Trotzdem kommt wieder dieser Fehler.
Was kann es denn noch sein?
SO langsam nervt mich das oO
-
Linkst Du die CRT statisch oder dynamisch?
Bist Du gaz sicher, dass die Projekt Einstellungen für LIB und EXE identisch sind?
-
Martin Richter schrieb:
Linkst Du die CRT statisch oder dynamisch?
Bist Du gaz sicher, dass die Projekt Einstellungen für LIB und EXE identisch sind?
Ich linke sie statisch, hatte gestern auch mal MD probiert, da kam auch der Fehler. Ich kontrollier die Einstellungen nochmal, aber sie waren identisch soweit ich gesehen habe.
Und im Debug-Modus gehts ja, und mit einem resiz(0) außerhalb auch.Die lib nimmt keine vorkommpiliereten HEader und keine MFC, aber das dürfte ja nichts ausmachen.
-
Bist Du ganz sicher, dass beide die selbe CRT verwenden?
Bist Du ganz sicher, dass beide die gleiche STL verwenden?
-
Martin Richter schrieb:
Bist Du ganz sicher, dass beide die selbe CRT verwenden?
Bist Du ganz sicher, dass beide die gleiche STL verwenden?Wie kann ich das testen, bzw. wo muss ich da nachschauen?
Unter Compiler->Codegererierung stehen beide auf /MT
-
Das wird immer wirrer:
// void CRobCalDlg::OnBnClickedButtonTest() { CString tmp; std::vector<double> data; CNiUsb6008 dev; data.resize(0); dev.getCurrentData(data,5,1); tmp.Format(_T("%d"),data.size()); std::vector<double> data2; dev.getCurrentData(data2,5,1); tmp.Format(_T("%d"),data2.size());Ein resize-Aufruf scheint zu reichen ?!?!
Wenn ich da einen zweiten Vektor anlege, und bei dem ersten das resize kam, dann funktioniert auch der Auruf mit dem 2. Vektor. Scheint wohl wirklich ein VS Bug zu sein, oder?
Komisch ist auch, wenn ich außen reserve anstatt resize mache, dann fliegt der Fehler wieder. Was auch immer es ist, liegt dann also nicht am Allokieren.
Und das resize(0) tut auch im release-Modous keinen Speicher anlegen(habe mir capacity nmal ausgeben lassen, die bleibt auf 0!)
-
So wieder was rausgefunden: das resize im Hauptprogramm muss nicht vor dem getCurrentData kommen. Es muss einfach irgendwo stehen, Ich hatte jetzt einen Vektor, der nach dem getCurrentData angelegt wurde und das resize nutzt. Dann fliegt auch kein Fehler.
Nehm ich das resize raus -> FehlerTemplate-Methoden werden ja nur angelegt, wenn sie auch benutzt werden.
Kann es evtl. sein, dass in der statischen Lib nur ein Aufruf der resize Methode ist und diese im Hauptprogramm erwartet. Wenn das Hauptprogramm nun kein resize macht, wird es nicht anlegt und dann kracht es in der lib?
Andererseits habe ich ein extra Testprojekt gemacht wo ein Vektor "resized" wird, da ging alles.Hat niemand mehr Ideen, was das verursachen könnte?
-
Auslöser gefunden:
#define _SECURE_SCL 0
Das war definiert um so ein paar unchecked-Warnungen nicht anzeigen zu lassen.
Warum kommt es denn zu so einem komischen Verhalten, wenn man checked Iterators deaktiviert?