Alte Frage, aber ich habe noch ein paar Gedanken.Array in C, und sein Zeiger
char * getarrmal(void)
{
char *str;
str = (char *)malloc(10);
str[0] = 'a';
str[1] = 'b';
str[2] = 'c';
str[3] = '\0';
return str;
}
char * getarrdef(void)
{
char *str = "hello";
return str;
}
char * getarrfix(void)
{
char str[10] = "world";
return str;
}
Drei Funktionen. Die ersten beiden geben die Zeichenfolgenadresse zurück und die Zeichenfolge wird im Heap gespeichert, damit Sie sie beispielsweise in der Funktion main() weiterverwenden können.
In der letzten Funktion ist das Str eine lokale Variable und das zurückgegebene str kann nicht verwendet werden.
Meine Frage ist, wenn ich in der Funktion, die die ersten beiden ruft zurückgeben, sollte ich sie manuell freigeben? Es ist leicht zu glauben, dass der Fall malloc wahr ist, aber ich bin mir nicht sicher, ob das auch für char * str = "hallo" der Fall ist.
Wenn ich getarrdef() und nicht seinen Rückgabewert frei, habe ich irgendwie Speicherleck?
Wenn Sie es zugewiesen haben und Sie nicht 'malloc' (oder einen seiner Cousins) dazu verwendet haben, rufen Sie nicht' free'. Einfach. –