0

メモリ管理: スコープとローカル ポインター変数

Q. メモリ管理に関して、次のコードのエラーは何ですか?

 char* secret_message()
 {
   char message_buffer[100];
   char* text = "Hey man!";
   int n = 0;
   while (text[n] != '\0')
     n++;
   for (int i = 0; i <= n ; i++)
     message_buffer[i] = text[i];
   return message_buffer;
 }

答え。message_buffer は、関数の終了後に自動的に回収されるローカル変数だと思います。return ステートメントの直後に message_buffer が消えるため、この関数は無効なメモリ ロケーションへの参照を返します。

それが正しいか?

私にお知らせください。ありがとう、

4

3 に答える 3

2

答え。message_buffer は、関数の終了後に自動的に回収されるローカル変数だと思います。return ステートメントの直後に message_buffer が消えるため、この関数は無効なメモリ ロケーションへの参照を返します。

はい、正しいです。message_bufferスタックに割り当てられている場合、そのメモリは関数の終了時に割り当て解除されます。ポインタは解放メモリを指します。

ところで:

char* text = "Hey man!";

する必要があります

const char* text = "Hey man!";

最新の C++ で。

于 2013-04-23T02:36:53.907 に答える
0

あなたは正しいです。これにより、未定義の動作が発生します。

于 2013-04-23T02:38:25.860 に答える