speicher freigeben zweidimensionales array
-
nach deiner vorgeschlagenen änderung hat sich aber die fehlermeldung geändert:
jetzt bekomme ich ein:
test.exe hat einen Haltepunkt ausgelöst.
-
Die Größenberechnung beim malloc für matrix ist auch falsch.
Du willst in matrix ja nichtchar
ablegen sondernchar*
.
-
matrix = (char**)malloc(sizeof(char)*string_cnt); /* muss sizeof(char*) heißen */ fflush(stdin); /* Anfängerschrott */ for(i;i < string_cnt;i++) { int x = 0; printf("Please input a string %d: ",i); matrix[i] = (char*)malloc(sizeof(char)); /* Cast-Schrott */ while((matrix[i][x] = getchar()) != '\n') { matrix[i] = (char*)realloc(matrix[i],sizeof(char)*(x+2)); /* per se inperformant */ x++; } } for(a=string_cnt; a > 0; a--) /* startet/endet zu früh: for(a=string_cnt-1; a >= 0; a--)*/
-
Ach noch was:
sizeof(char) ist per Default 1. Kannst du also gleich 1 hin schreiben.
sizeof(char*) ist Systemabhängig.
-
matrix = (char**)malloc(sizeof(char)*string_cnt); /* muss sizeof(char*) heißen */
stimmt und ich such da ewig herum. danke
fflush(stdin); /* Anfängerschrott */
ja weiss ich. habs nur halt mit visual studio gemacht zum testen. was mich interessieren würde
is aber wie man sonst am schnellsten den puffer leer bekommt? gibts da eine andere funktion?matrix[i] = (char*)malloc(sizeof(char)); /* Cast-Schrott */
was passt hier genau nicht?
matrix[i] = (char*)realloc(matrix[i],sizeof(char)*(x+2)); /* per se inperformant */
und hier? irgendwie muss ich die größe ja angeben.
-
du musst hier nichts casten.
stattmatrix[i] = (char*)malloc(sizeof(char));
einfach
matrix[i] = malloc(sizeof(char)); /* ohne (char *) */
das gilt auch für alle anderen mit malloc allokierten speicher. du musst den allokierten speicher -nicht- casten.
warum willst du den puffer leeren? das brauchst du nicht. eigentlich braucht man dieses unsägliche "fflush" so gut wie nie.
-
du musst hier nichts casten.
ja schon aber wenn ich nicht caste bekomm ich unter visual studio
eine error meldung.
-
xxmaxx schrieb:
du musst hier nichts casten.
ja schon aber wenn ich nicht caste bekomm ich unter visual studio
eine error meldung.Dann benutzt du einen C++-Compiler. Benutze einen C-Compiler für C. Der Standardcompiler vom Visual Studio hat auch einen C(89) Modus.
-
ok alles klar. vielen dank für die hilfe
-
wenn du nur c programmieren willst, dann kannst du auch einen einfachen c-compiler benutzen.
ich empfehle den standard-compiler aller linux-systeme: den gcc.
für windows http://mingw.org/
man braucht unter windows keinen schei.. von ms.