Debug-Assertion fehlgeschlagen! Ausdruck: _BLOCK_TYPE_IS_VALID [geschlossen]

8

Ich erhalte diese Fehlermeldung:

  

Debug-Assertion fehlgeschlagen!

     

Expression: _BLOCK_TYPE_US_VALID (pHead- & gt; nBlockUse)

beim Versuch, Folgendes zu tun

%Vor%

Der Fehler scheint mit der Sortierfunktion in Zusammenhang zu stehen. Ich überprüfe alle Instanzen von Vektornetzen und sie scheinen in Ordnung zu sein, mit verschiedenen SSEs. Das Lustige ist, dass ich einen einfacheren Fall des obigen Codes erstellt habe (siehe unten) und es hat ohne Fehler funktioniert. Ich ruiniere mein Gehirn. Bitte helfen.

%Vor%     
ForceMagic 09.07.2009, 06:21
quelle

5 Antworten

11

Die Assertion _BLOCK_TYPE_IS_VALID wird ausgelöst, wenn Sie den Header eines Blocks, der von new zugewiesen wurde, überschreiben. Dies passiert, wenn Sie Objekte in Scheiben schneiden, tote Objekte usw. verwenden.

Sie sollten sich Ihren vollständigen Code ansehen und versuchen, mit den Daten zu arbeiten, die Sie in Ihrem Debugger haben. Dieses kurze Code-Snippet enthält mehrere "merkwürdige" C ++ - Anwendungen, aber keinen offensichtlichen Punkt, an dem dies den beschriebenen Fehler (zumindest für mich) erzeugt.

    
Christopher 09.07.2009 09:41
quelle
3

aus meiner Erfahrung - Dieser Fehlertyp könnte durch Heap-Korruption verursacht werden. also .. Sie müssen zuerst auf Speicherlecks prüfen. Wenn Sie Visual Studio verwenden, verwenden Sie _CrtCheckMemory ().

    
Ujjwal Singh 12.01.2012 19:29
quelle
1

Danke allen. Zuerst lösche ich den Speicher, der für den Vektor im Pop-Destruktor reserviert ist, mit

%Vor%

Die Fehlermeldung sagt nicht viel aus und ich würde mich freuen, wenn mir jemand zeigen würde, wie man MSVC 2008 dazu bringt, detailliertere Informationen anzuzeigen. Hier ist, was es sagt (ich kann es aus irgendeinem Grund nicht ausschneiden und einfügen, also tippe ich es neu ein):

%Vor%

Wenn ich debugge, zeigt der Compiler mir Zeile 52 der Datei dbgdel.cpp:

%Vor%

innerhalb

void operator löschen (void * pUserData)

Hier ist ein Teil meines Codes, der zeigt, was passiert, bevor ich versuche,

zu sortieren %Vor%

Alles funktioniert bis zum sort () Punkt richtig. Der lSz-Zeiger wird innerhalb von NN verwendet, um die Anzahl der Knoten in jeder Schicht des neuronalen Netzwerks zu halten, zum Beispiel lSz [3] = {12,5,1} (12 Eingänge, eine versteckte Schicht mit 5 Neuronen und eine Ausgabe). Es wird verwendet, um ein 3D-Array der Gewichte für jede Verbindung des Netzwerks zu erstellen. Jedes Netzwerk NN (es gibt 100 von ihnen) innerhalb der Population hat sein eigenes Gewicht-Array. Aber sie teilen die gleichen LSZ [] und andere strukturelle Parameter, die leider von anderen NN-Instanzen auf die anderen kopiert werden. Ich wollte statische verwenden, um diese freigegebenen Klassenmitglieder zu deklarieren, aber das würde Parallelisierung verhindern.

    
bill s 09.07.2009 15:46
quelle
0

Ich habe gerade entdeckt, dass wenn ich Pop-Konstruktionen wie diese mache

%Vor%

Dann funktioniert alles, einschließlich sort (). Aber, das funktioniert nicht für mich, weil jetzt der Vektor der Netze die gleiche Instanz von NN popSize mal enthält. Die Idee war, jeden dieser Fälle einzeln zu initialisieren. Jede Instanz von NN soll ein eigenes Array von Gewichtungen haben, das zufällig innerhalb des NN-Konstruktors initialisiert wurde:

%Vor%     
bill s 09.07.2009 16:00
quelle
0

Manchmal ist es, weil Sie eine Zeichenfolge der Länge x haben und Sie haben versehentlich ein längeres Wort hineingelegt ... das ist in meinem Fall passiert.

    
Reuben 07.09.2012 12:32
quelle

Tags und Links