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 是函数结束后自动回收的局部变量。此函数返回对无效内存位置的引用,因为 message_buffer 在 return 语句后立即消失。

这是对的吗?

请告诉我。谢谢,

4

3 回答 3

2

回答。我认为 message_buffer 是函数结束后自动回收的局部变量。此函数返回对无效内存位置的引用,因为 message_buffer 在 return 语句后立即消失。

是的,这是正确的。message_buffer在堆栈上分配,它的内存将在函数退出时被释放。指针将指向释放内存。

顺便提一句:

char* text = "Hey man!";

应该

const char* text = "Hey man!";

在现代 C++ 中。

于 2013-04-23T02:36:53.907 回答
2

message_buffer 是自动变量,其范围仅在函数内。此变量应在主函数中声明或在函数中声明为静态变量。

于 2013-05-02T09:17:19.993 回答
0

你是对的。这会产生未定义的行为。

于 2013-04-23T02:38:25.860 回答