Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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++ 初始化函数中的字符数组并返回它会导致main中的错误输出 char*func() { 常数int size=24; char-bin[大小]; 字符*温度; 对于(int i=0;i_C++_Arrays_Char - Fatal编程技术网

C++ 初始化函数中的字符数组并返回它会导致main中的错误输出 char*func() { 常数int size=24; char-bin[大小]; 字符*温度; 对于(int i=0;i

C++ 初始化函数中的字符数组并返回它会导致main中的错误输出 char*func() { 常数int size=24; char-bin[大小]; 字符*温度; 对于(int i=0;i,c++,arrays,char,C++,Arrays,Char,您不能使用指针来释放空间,就像已完成执行的函数堆栈一样。 这种未定义的行为意味着任何事情都会发生,甚至众所周知的恶魔会从你鼻子里飞出来 您的选择: 使用调用方分配的缓冲区 使用静态缓冲区(注意重入问题和多线程问题) 使用动态分配(new,new[],malloc()和朋友) 返回包含数据的结构(标准容器或其他)。可能使用动态分配。(最后一点由Matt McNabb提供) 在堆栈上分配内存时,在函数返回后不能引用该位置:“char*s”被分配了一个引用无效内存位置的值。-返回一个包含data@

您不能使用指针来释放空间,就像已完成执行的函数堆栈一样。
这种未定义的行为意味着任何事情都会发生,甚至众所周知的恶魔会从你鼻子里飞出来

您的选择:

  • 使用调用方分配的缓冲区
  • 使用静态缓冲区(注意重入问题和多线程问题)
  • 使用动态分配(
    new
    new[]
    malloc()
    和朋友)
  • 返回包含数据的结构(标准容器或其他)。可能使用动态分配。(最后一点由Matt McNabb提供)

在堆栈上分配内存时,在函数返回后不能引用该位置:“char*s”被分配了一个引用无效内存位置的值。

-返回一个包含data@MattMcNabb:是的,那也行。。。。
char* func()
{
  const int size = 24;
  char bin[size];
  char *temp;
  for(int i=0; i<23; i++)
    bin[i] = '1';
  bin[23] = '\0';
  temp = bin;
  return temp;
}

int main()
{
  char *s;
  s = func();
  cout << s << endl; //prints out weird values

  return 0;
}
char bin[size];