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];