Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 内存管理:作用域和局部指针变量_C++_Memory Management_Memory Leaks_Reference_Local Variables - Fatal编程技术网

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

C++ 内存管理:作用域和局部指针变量,c++,memory-management,memory-leaks,reference,local-variables,C++,Memory Management,Memory Leaks,Reference,Local Variables,内存管理:作用域和局部指针变量 在内存管理方面,以下代码中的错误是什么 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

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

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

 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;
 }
char*secret_message()
{
字符消息缓冲区[100];
char*text=“嘿,伙计!”;
int n=0;
而(文本[n]!='\0')
n++;
对于(int i=0;i
答案。我认为message\u buffer是在函数结束后自动回收的局部变量。此函数返回对无效内存位置的引用,因为message\u buffer在return语句之后立即消失

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

顺便说一句:

应该是

const char* text = "Hey man!";
《现代C++》

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

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

顺便说一句:

应该是

const char* text = "Hey man!";

<>在现代C++中,

你是正确的。这会产生不明确的行为。

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

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

消息缓冲区是自动变量,其作用域仅在函数中。
此变量应在主函数中声明,或在函数中声明为静态变量。

是的,它与您的假设相同。是的,它与您的假设相同。