C: ANSI fscanf() verursacht Zugriffsverletzung

Hi,

der fscanf Aufruf in folgendem C Code:

bool bReadHeader( FILE** const pfSource, const int iFLength, int* iLength, int* iRow)
{
//Variablendeklaration
int iTlength = 0;
int iTrow = 0;
char* pcM = (char*) malloc(3*sizeof(char));
int res = 0;

//Headerdaten einlesen u. Ueberpruefung der Werte
for (int i = 0; i < iFLength; i++) {
if ( (3 != fscanf(pfSource, "%2s %4u %4u", pcM, &iTlength, &iTrow)))
return false;
...
}

return true;
}

Verursacht im VC++ .NET 2003 eine Zugriffsverletzung ohne naehere Angaben. Ich weiss bloss, dass der Fehler in der Funktion 'input' aus 'input.c'
auftritt, worauf '_inc' (input.c) aufgerufen wird und das Programm abgebrochen wird. Hat jemand eine Ahnung woran das liegen koennte ?

Gruss,
caspar

P.S.: kann man hier Quelltext hervorgehoben eingeben?
 
Original von caspar
Hi,

der fscanf Aufruf in folgendem C Code:

bool bReadHeader( FILE** const pfSource, const int iFLength, int* iLength, int* iRow)
{
//Variablendeklaration
int iTlength = 0;
int iTrow = 0;
char* pcM = (char*) malloc(3*sizeof(char));
int res = 0;

//Headerdaten einlesen u. Ueberpruefung der Werte
for (int i = 0; i < iFLength; i++) {
if ( (3 != fscanf(pfSource, "%2s %4u %4u", &pcM, &iTlength, &iTrow)))
return false;
...
}

return true;
}

Verursacht im VC++ .NET 2003 eine Zugriffsverletzung ohne naehere Angaben. Ich weiss bloss, dass der Fehler in der Funktion 'input' aus 'input.c'
auftritt, worauf '_inc' (input.c) aufgerufen wird und das Programm abgebrochen wird. Hat jemand eine Ahnung woran das liegen koennte ?

Gruss,
caspar

P.S.: kann man hier Quelltext hervorgehoben eingeben?


ich denke das grüne fehlt ;)

mfg bikky
 
erstmal vielen dank fuer die schnelle Antwort!

mit & laeufts auch nicht. Das komische ist, dass ich mit Adressoperator genau an der selben Stelle rausfilege !? Da haette der Compiler doch in einem der beiden Faelle eine Fehlermeldung ausgeben muessen. Komisch ...
 
nein, da kann er keine fehlermeldung ausgeben, da fscanf eine variable parameterliste hat - und damit jagst du jetzt typsicherheit in die wüste.

zu dem problem: wenn du schon den debugger nutzt, dann geht doch am besten mal beim crash die aufrufliste stück für stück nach oben, um zu sehen, an welcher stelle in deinem programm das problem auftritt. damit lässt sich das ganze besser eingrenzen...
 
Original von Der Meister
nein, da kann er keine fehlermeldung ausgeben, da fscanf eine variable parameterliste hat - und damit jagst du jetzt typsicherheit in die wüste.
Mist, haett' ich wissen muessen :)

zu dem problem: wenn du schon den debugger nutzt, dann geht doch am besten mal beim crash die aufrufliste stück für stück nach oben, um zu sehen, an welcher stelle in deinem programm das problem auftritt. damit lässt sich das ganze besser eingrenzen...
Gute Idee. Habe ich auch gemacht. Aber diese fscanf Version nutzt so viele verpeilte Funktionen - da braucht man einen starken Magen, um das zu ueberstehen. Bspw. gibt's in folgender Funktion den Fehler:
Code:
static int __cdecl _inc (
    REG1 FILE *fileptr
    )
{
    return(_getc_lk(fileptr));
}
Aber klar, hast schon recht, mir wird nichts anderes uebrig bleiben.

So far,
caspar
 
Zurück
Oben