Ich schreibe ein C-Programm, aber ich bekomme einige Speicherfehler, also habe ich beschlossen, ein kleines Programm zu machen, um zu sehen, wann und wie Speicher freigegeben werden.wie ich Speicher in C
Mein Beispiel:
int main() {
char *a=malloc(5);
a="mama";
char *b=malloc(strlen(a));
printf("%s\n",a);
strcpy(b,a);
free(a);
printf("%s\n",b);
return 0;
}
hier ich erhalte eine Fehlermeldung:
* Fehler in `./a ': frei(): ungültige Zeiger: 0x0000000000400757 *
aber wenn ich ch ange nur eine Zeile:
int main() {
char *a=malloc(5);
strcpy(a,"mama");
char *b=malloc(strlen(a));
printf("%s\n",a);
strcpy(b,a);
free(a);
printf("%s\n",b);
return 0;
}
Mein zweites Programm gut funktioniert, warum also in dem ersten Fehler ich erhalte? ich hoffe, dass Sie mir erklären können, warum.
In My Real Programm, das ich bin, wie das zu tun:
char * getDate(){
char *date=malloc(5);
//some instructions here
return date;
}
int main() {
char *a=malloc(5);//im sure that a will not exceed 5 bytes
a=getDate();
return 0;
}
Es ist nur ein kleines Beispiel, und ich weiß nicht, wo Speicher frei .so, wie und wo ich Speicherplatz freigeben kann, habe ich Frei Datum oder den Char Zeiger?
Edited zweite Zeit:
void getDate(char *a){
//some instructions here
strcpy(a,"haha");
}
int main() {
char *a=malloc(5);
getDate(a);
int i= strlen(a);
printf("%s and the size is :%d\n",a,i);
free(a);
return 0;
}
was sind die Regeln, ich habe zu folgen Speicherfehler zu vermeiden.
vielen dank.
'char * a = malloc (5)' - verwende keine magischen Zahlen. – user8
Sie reservieren nicht genügend Speicher für 'b'. Denken Sie daran, 'strlen' zählt das abschließende Null-Byte nicht, daher müssen Sie eins hinzufügen, wenn Sie' b' zuweisen. –
[seufz] Leck in den ersten beiden Zeilen :( –