6.13 临时变量内存不能返回
从缺陷中学习C/C++
代码示例
char *initialize()
{
char str[300];
char* ptr = str;
return ptr;
}
void useMyStr(char * str){
char tmp[300] = "123";
printf("%s\n", tmp);
printf("%s\n", str);
}
int main()
{
char *myStr = initialize();
useMyStr(myStr);
return 0;
}
现象&后果
返回的指针将指向一个不确定内容的地址。
Bug分析
在函数initialize中的本地变量char数组分配的内存在栈上,随着函数的返回会被收回。正确的做法是:返回指针对应的内存块需要用函数malloc动态分配。
正确代码
char *initialize()
{
char myStr = (char)malloc(300);
return ptr;
}
void useMyStr(char * str){
char tmp[300] = "123";
printf("%s\n", tmp);
printf("%s\n", str);
}
int main()
{
char *myStr = initialize();
if(myStr != NULL)
useMyStr(myStr);
delete myStr;
return 0;
}
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
时间: 2024-09-08 06:41:19