本节书摘来自异步社区出版社《从缺陷中学习C/C++》一书中的第6章,第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【第一部分】