古い質問ですが、まだいくつか考えがあります。
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;
}
3つの機能。最初の 2 つは文字列アドレスを返し、文字列はヒープに格納されるため、main() 関数などで引き続き使用できます。
最後の関数では、str はローカル変数であり、返された str は使用できません。
私の質問は、最初の 2 つを呼び出している関数に戻ったときに、それらを手動で解放する必要があるかどうかです。malloc の場合はそうであると信じるのは簡単ですが、char *str = "hello" の場合もそうであるかどうかはわかりません。
getarrdef() を使用し、その戻り値を解放しないと、何らかの形でメモリ リークが発生しますか?