VC++ 2010 Expression: (str != NULL)

cwriter

Erfahrenes Mitglied
Hallo Welt
Ich habe ein sehr nervtötendes Problem mit VC++ 2010 Express:
Während
C:
FILE* f;
f=fopen("Test.txt","r");
char str[256];
fgets(str,256,f)
auf Dev-C++ problemlos funktioniert, heisst es bei VC++ 2010:
Debug Assertion Failed!

Program:
...Codes\Test.exe
File: f:\dd\vctools\crt_bld\self_x86\crt\src\fgets.c
Line: 57

Expression: (str != NULL )

[...]

Wisst ihr irgendwas, das mir weiterhilft?

Danke
cwriter
 
Hallo,

war fopen() erfolgreich bzw. was ich meine: Wird "Test.txt" (ohne Pfadangabe) auch gefunden?

Gruß
MCoder
 
Tja, das ist jetzt aber peinlich.
Nein, da die Datei nicht erstellt wurde :-( *schäm*

Da muss ich aber trotzdem fragen, weshalb der dann mit "Debug Failed" und der nicht existierenden Pfadangabe kommt? Bei Dev-C++ gab's so eine Meldung nicht :confused:

Naja, auf alle Fälle ein DICKES Danke an meinen Retter :-)

cwriter
 
Da muss ich aber trotzdem fragen, weshalb der dann mit "Debug Failed" und der nicht existierenden Pfadangabe kommt? Bei Dev-C++ gab's so eine Meldung nicht :confused:
Keine Ahnung, was es mit den Meldungen auf sich hat :-)
Aber ich habe mittlerweile schon genug (leidvolle) Erfahrungen gesammelt, dass ich weiß, wo man als erstes hinlangen sollte...


Gruß
MCoder
 
Hi.
Da muss ich aber trotzdem fragen, weshalb der dann mit "Debug Failed" und der nicht existierenden Pfadangabe kommt? Bei Dev-C++ gab's so eine Meldung nicht :confused:
Nun, der MinGW Compiler (den du bei Dev-C++ verwendest) nutzt lediglich eine Version der C Laufzeitbibliothek.

Microsoft bietet mehrere Laufzeitbibliotheken (Release / Debug und Shared / Static in Kombination). Du hast deinen Code offensichtlich mit der Debug Version gelinkt, also die Debug Build-Konfiguration im VS verwendet. Da werden viele Laufzeittests aktiviert, die dann evlt. zu solchen Fehlermeldungen führen können und natürlich auch Zeit beanspruchen - also nicht wundern wenn das Programm in der Debug Variante sehr langsam ist...

Der Pfad, der dort ausgegeben wurde ist einfach der Pfad zur Datei wie er beim Erstellen der Laufzeitbibliothek selbst gegeben war, also als die Bibliothek bei Microsoft kompiliert wurde. Die Datei liegt tatsächlich unter %programfiles%\Microsoft Visual Studio 9.0/VC/crt/src/fgets.c

Gruß
 
Danke für die Erklärung, Deepthroat! Ich wusste nur, dass der Debugger Sekunden(!) braucht, um die Zeichensätze zu laden :-)

cwriter
 
Die Fehlermeldung ist insofern etwas verwirrend weil die Parameter in der Implementation etwas unerwartet benannt sind:
C:
_TSCHAR * __cdecl _fgetts (
        _TSCHAR *string,
        int count,
        FILE *str
        )
{
...
    _VALIDATE_RETURN(( str != NULL ), EINVAL, NULL);
...
}
 
Du erhälst als Fehlermeldung, dass die assertion str != NULL verletzt wurde. Man vermutet wohl als erstes, dass str als Abkürzung für string fungiert und versteht nicht was denn mit dem ersten Parameter nicht in Ordnung ist. str jedoch steht (vermutlich) für stream und bezeichnet den dritten Parameter und der Fehler muss da gesucht werden.
 
Du erhälst als Fehlermeldung, dass die assertion str != NULL verletzt wurde. Man vermutet wohl als erstes, dass str als Abkürzung für string fungiert und versteht nicht was denn mit dem ersten Parameter nicht in Ordnung ist.
Genau das hatte mich auch verwirrt.. :)
str jedoch steht (vermutlich) für stream und bezeichnet den dritten Parameter und der Fehler muss da gesucht werden.
Jupp:
C:
// %programfiles%\Microsoft Visual Studio 9.0/VC/crt/src/fgets.c
_TSCHAR * __cdecl _fgetts (
        _TSCHAR *string,
        int count,
        FILE *str // <<< stream, DOH
        )
Gruß
 

Neue Beiträge

Zurück