Debug Assertion failed!
-
Hallo zusammen,
ich bekomme beim Debuggen meines Programms immer diese Fehlermeldung:
Debug Assertion failed!
Program: D:\User\...\Debug\Dateiname.exe
File: f:\dd\vctools\...\src\fprintf.c
Line: 55Expression: (str != NULL)
For more infomationon on how your program can cause an assertion failure, see the visual C++ documentation on assert.
(Please Retry to debug the application)
Dann kommen die Auswahltknöpfe: abbrechen Wiederholen Ignorieren
Kann mir das einer bitte erklären? Was habe ich denn falsch gemacht?
Ich habe schon rumgegooglt allerdings ohne Erfolg deshalb wende ich mich an euch.Vielen Dank
-
drück auf retry und schau, welcher deiner (c)strings leer ist. anderenfalls kannst du hier auch ein kompilierbares minimalbeispiel posten.
-
Nun, beim Ausführen der Datei ...\Dateiname.exe ist in der Datei ...\fprintf.c in Zeile 55 der Fehler aufgetreten, dass str NULL ist.
Anhand der Signatur von fprintf vermute ich, dass du irgendwo fprintf mit einem Nullptr als Formatstring aufrufst, z.B. fprintf(file, NULL) (ggf. nicht so offensichtlich).
-
int encoderwerte = new int[maxarraylaenge];
FILE pFile;
float u = 0;
Visa.measure_U_B_Referenzierung(&u, 4, 4);if (c == 'y')
{
float *datenreihen_Y = new float[maxarraylaenge];
// Alle Einträge im Datensatz mit nullen setzen
for (int i = 0; i < maxarraylaenge; i++)
{
datenreihen_Y[i] = 0;
}
pFile = fopen ("D:\\user\\Bill\\SCE\\Daten\\Fahrt\\werte.txt","w");
int i = 0;
//int k = 0;
for (int j = 0; j < anzahlwiederholungen; j++)
{
i = 0;
do
{
MyTable.MoveBy(0, grob_schrittweite, 0);
MyTable.setY_ENC(MyTable.getY_ENC() + grob_schrittweite);
encoderwerte[i] = MyTable.getY_ENC();// Messen!
Visa.measure_U(&datenreihen_Y[i], 4, 4);fprintf(pFile, "%d \t%6.4f\n", encoderwerte[i], datenreihen_Y[i]);
i++;
}
while((datenreihen_Y[i-1] == U_DC) && (i < maxschritte));fprintf(pFile, "\n");
//k = grob_schrittweite * i; // * anzahl der MessungenMyTable.MoveTo ( 0 , 0 , 0 ) ;
MyTable.setY_ENC(0) ;
}
fclose(pFile);
delete encoderwerte;
delete datenreihen_Y;
-
Das ist C, nicht C++.
-
Kompilierbares Minimalbeispiel, nicht irgendwelche Code-Fetzen.
-
hier steht, dass fopen einen nullpointer (also NULL, genau das was bei dir der fall ist) liefert, wenn die datei nicht geöffnet werden konnte. hättest du dir auch ganz schnell selbst beantworten können.
ich gebe daddy_felix recht, das hat mit c++ nichts am hut.
-
Danke
-
Du willst ne Lösung?
Compilier im Release Modus
-
was soll das heissen Skym0sh0 ?
-
Assertions sind Konstrukte, die nur im Debug-Modus des Compilers ausgeführt bzw. geprüft werden (Bedingungen werden sichergestellt).
So nach dem Motto:
#ifdef DEBUG # define assert(X) if ( X != true ) {throwError();} #else # define assert(X) (void)(0) #endif // ... int i = get_user_input(); // schon falsches Beispiel, assert ist für Programmierfehler gedacht // in etwa mit Checked-/Unchecked-Exceptions aus Java vergleichbar. assert(i < 10);
Im Release-Modus haben diese Anweisungen jedoch keine Auswirkungen mehr.
In deinem Fall wird der Fehler wahrscheinlich einfach nicht gesehen und das Programm stürzt nicht mit solch einer Fehlermeldung ab.
Nachteil: Du hast den Fehler selbst nicht entfernt und er wird dir früher oder später den Hals brechen. War von meiner eher sowas wie Sarkasmus.
-
daddy_felix schrieb:
Das ist C, nicht C++.
Das ist eindeutig C++. Auch schlechtes C++ ist C++. Auch "C with class" ist C++, auch "C with cout" ist C++, "C++ with printf" ist C++, ein Grossteil von C ist C++, ...
-
mich wundert es dass du keine fehler bekommst beim löschen mit delete von mit new[] erzeugten feldern. bist du zufälligerweise masochist?
-
Ich danke euch allen für eure Bemühungen!
-
Skym0sh0 schrieb:
# define assert(X) if ( X != true ) {throwError();}
lol