内存管理:范围和本地指针变量

时间:2013-04-23 02:34:11

标签: c++ memory-management memory-leaks reference local-variables

内存管理:范围和本地指针变量

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语句后立即消失。

这是对的吗?

请告诉我。 谢谢,

3 个答案:

答案 0 :(得分:2)

  

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

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

顺便说一句:

char* text = "Hey man!";

应该是

const char* text = "Hey man!";
现代C ++中的

答案 1 :(得分:2)

message_buffer是自动变量,其范围仅在函数内。 这个变量应该在main函数中声明,或者在函数中声明为静态变量。

答案 2 :(得分:0)

你是对的。这会产生不确定的行为。