【问题标题】:Memory Management : scope and local pointer variable内存管理:范围和局部指针变量
【发布时间】:2013-04-16 02:41:42
【问题描述】:

内存管理:作用域和局部指针变量

问。在内存管理方面,以下代码中的错误是什么?

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

对吗?

请告诉我。 谢谢,

【问题讨论】:

  • 是的,和你想象的一样。

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


【解决方案1】:

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

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

顺便说一句:

char* text = "Hey man!";

应该是

const char* text = "Hey man!";

在现代 C++ 中。

【讨论】:

    【解决方案2】:

    message_buffer 是自动变量,其范围仅在函数内。 这个变量要么在主函数中声明,要么在函数中声明为静态变量。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-07-22
        • 1970-01-01
        • 2017-11-23
        • 2016-11-13
        • 2013-04-03
        • 2017-03-05
        • 1970-01-01
        • 1970-01-01
        • 2021-11-11
        相关资源
        最近更新 更多