《从缺陷中学习C/C++》——6.13 临时变量内存不能返回

本节书摘来自异步社区出版社《从缺陷中学习C/C++》一书中的第6章,第6.13节,作者: 刘新浙 , 刘玲 , 王超 , 李敬娜 , ,更多章节内容可以访问云栖社区“异步社区”公众号查看。

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

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

上一篇:《从缺陷中学习C/C++》——6.11 函数中途退出忘记释放内存


下一篇:跨浏览的DOM节点事件监听器