Hallo,
wir haben ein Problem mit einem C Programm. Nach einigen Aufrufen einer Funktion in der malloc() verwendet wird stürzt das Programm ab. Entwickelt wird in Code:Blocks mit dem Mingw Compiler (mitgeliefert) unter Windows 7 64.
Um den Fehler einzugrenzen haben wir einige Ausgaben mit printf() in das Programm eingebaut.
Nach einigen Aufrufen dieser Funktion kommt ein Windows Fenster mit der Meldung "programm.exe funktioniert nicht mehr" hier ist dann nur noch die Möglichkeit "Programm schließen" anzuklicken.
Das für mich überraschende ist, dass im Konsolenfenster die Ausgabe des ersten printf() noch zu lesen ist und im Fall dieses Problems das zweite printf() nicht mehr. Für mich bedeutet das, dass alleine der Aufruf von malloc() zu diesem Absturz führt und nicht Speicher der nicht reserviert werden konnte. (Bevor der Pointer von malloc() benutzt wird, wird auf NULL geprüft usw, aber bis dahin kommt es ja gar nicht).
Versuche mit calloc und new führten zum gleichen Problem. Auch das Ersetzen von d_setup->AnzLayer mit einer konstanten Zahl führte nicht zu einer Lösung.
Code:Blocks gibt noch:
Process terminated with status -1073741510 (0 minutes, 4 seconds)
nach dem Absturz aus.
Hat jemand eine Idee wie dieses Verhalten hervorgerufen wird?
Vielen Dank für die Hinweise
Philipp
wir haben ein Problem mit einem C Programm. Nach einigen Aufrufen einer Funktion in der malloc() verwendet wird stürzt das Programm ab. Entwickelt wird in Code:Blocks mit dem Mingw Compiler (mitgeliefert) unter Windows 7 64.
Um den Fehler einzugrenzen haben wir einige Ausgaben mit printf() in das Programm eingebaut.
Code:
double funktion( struct structsetup * d_setup , double * d_teilchen ) { ... double * d_diff_temp; printf("\nAllokation Temp-Array1"); d_diff_temp = (double*) malloc( d_setup->AnzLayer * sizeof(double) ); printf("\nAllokation Temp-Array2"); ... free( d_diff_temp ); }
Das für mich überraschende ist, dass im Konsolenfenster die Ausgabe des ersten printf() noch zu lesen ist und im Fall dieses Problems das zweite printf() nicht mehr. Für mich bedeutet das, dass alleine der Aufruf von malloc() zu diesem Absturz führt und nicht Speicher der nicht reserviert werden konnte. (Bevor der Pointer von malloc() benutzt wird, wird auf NULL geprüft usw, aber bis dahin kommt es ja gar nicht).
Versuche mit calloc und new führten zum gleichen Problem. Auch das Ersetzen von d_setup->AnzLayer mit einer konstanten Zahl führte nicht zu einer Lösung.
Code:Blocks gibt noch:
Process terminated with status -1073741510 (0 minutes, 4 seconds)
nach dem Absturz aus.
Hat jemand eine Idee wie dieses Verhalten hervorgerufen wird?
Vielen Dank für die Hinweise
Philipp
Comment