zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

C++内存学习变量 不能 返回 临时 缺陷
2023-09-11 14:17:38 时间

本节书摘来自异步社区出版社《从缺陷中学习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++的第一天:内存存储模型,引用和函数方面的知识 在运行的时候调用程序分配内存可以在任何时候决定分配内存即分配的大小,用户自行决定在何时释放。堆中的所有东西都是匿名的,不能用名字访问,只能通过指针来访问。
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。