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

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

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

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

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

这是对的吗?

请告诉我。 谢谢,


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

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

BTW:

char* text = "Hey man!";

应该

const char* text = "Hey man!";

在现代C ++中。


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


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

链接地址: http://www.djcxy.com/p/36339.html

上一篇: Memory Management : scope and local pointer variable

下一篇: memory allocation for local variable in C