PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : malloc und free



alchimist
15-03-2002, 19:23
Hi Leute,
ich habe ien kleines Problem ich bekomme einen Speicherzugriffsfehler wenn ich den befehl free() ausführe, woran kann es denn liegen?

Ich habe eine Struktur, worin ich einen char *Poinetr habe. Für diesen reserviere ich Speicherplatz mit malloc (....)
Wenn ich diesen Speicherplatzt dann freigebe erhalte ich den Fehler

Auserdem wäre es nett, wennmir jmd einen guten Debugger empfehlen könnte, und ein gutes manual dazu.

Mein Quelltext ist folgender.


void malloc_ptr (char *ptr, int size) {
// Allocate memory for *bmp_pixel_values
if( (ptr = (char *) malloc( size * sizeof(char) ) ) == NULL)
printf("No memory was allocated for the pointer!\n\n");
else
printf("%d bytes memory were allocated for the pointer!\n\n", size * sizeof(char) );

return;
}


int main (void) {
struct BITMAP picture, *temp;

temp = &picture;

system("clear");

init_struct (temp);
// ausgabe (temp);
open_files (temp);
check_file_opening (temp);
malloc_ptr (temp->BMP_COMPLETE, temp->BMP_HEADER_SIZE);
fill_ptr (temp->read_file, temp->BMP_COMPLETE, temp->BMP_HEADER_SIZE);
write_ptr_to_file (temp->write_file, temp->BMP_COMPLETE, temp->BMP_HEADER_SIZE);
show_ptr(temp->BMP_COMPLETE, temp->BMP_HEADER_SIZE);

free(temp->BMP_COMPLETE);

fclose(picture.read_file);
fclose(picture.write_file);
return 0;
}



:confused: :confused:

anda_skoa
15-03-2002, 22:19
Mein C ist nicht so gut wie mein C++, aber schaun wir mal.

wie kommt dein Pointer in der struct auf den Wert, der bei malloc zurück kommt.
Du weißt ihn ja nur dem pointer parameter zu.
Solltest duch nicht die Refernce auf den pointer übergeben?

void malloc_ptr (char *&ptr, int size) {

oder als besser Rückgabewert
char* malloc_ptr(int size);

Ein gutes Frontend zum GNU Debugger gdb ist der DDD

Ciao,
_