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

    xiaoxiao2024-07-25  19

    本节书摘来自异步社区出版社《从缺陷中学习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 全方位学习》.pdf【第一部分】
    最新回复(0)