0
int main()
{
    char* str;

    str = "string one";
    str = "string two";
    str = func();
    str = "string four";
    return 0;
}

char* func()
{
    char* tmp;

    tmp = "string three";
    return tmp;
}

str = "string one"; この文字列にメモリを割り当て、そのメモリのアドレスを に割り当てます str str = "string two"; str = func(); とが実行されたときに同じことが起こるはず str = "string four"; ですが、この状況でメモリがどのように処理されるのか疑問に思っています。これらの文字列に割り当てられたメモリは、新しい割り当てが発生したときに解放されますか、それとも一種のメモリ リークですか?

4

2 に答える 2

3

何も割り当てていないため、コードにメモリ リークはありません。すべての割り当ての右側に文字列リテラルのみがあり、それらは割り当てを解除する必要はありません (また、解除することもできません)。

C の文字列リテラルの「寿命」を参照してください

于 2013-04-12T11:41:09.357 に答える
1

freeこのタイプの割り当ては必要ありません。stackそれらは(一時)メモリにのみ割り当てられるためです。を使用してメモリを割り当てた場合malloc(それらは で割り当てられheapます)、次の操作を行う必要があります。free

于 2013-04-12T11:51:52.727 に答える