概述
下面代码会出现什么问题?
char *GetMemory( void )
{
char p[] = "hello world";
return p;
}
void Test( void )
{
char *str = NULL;
str = GetMemory();
printf( str );
}
参考答案:
char p[] = “hello world”;
return p;
的p[]数组为函数内的局部自动变量,在函数返回后,内存已经被释放。这是许多程序员常犯的错误,其根源在于不理解变量的生存期。
存在问题:
char p[] = “hello world”; 相当于char p[12],strcpy(p," hello world" ).p是一个数组名,属于局部变量,存储在栈中, “hello world” 存储在文字存储区,数组p是 “hello world” 的一个副本,在函数返回后自动释放内存,副本也就消失了,而函数返回的p指向的内容变得不确定,文字存储区的 “hello world"未改变。
修改程序:
①char* p= " hello world” ; return p; 这里p直接指向文字存储区的 " hello world" ,函数按值返回p存储的地址,所以有效。
②static char p[]= " hello world" ; return p; static指出数组p为静态数组,函数结束也不会释放,所以有效。
自动变量(即动态局部变量)属于动态存储类别,占动态存储区空间而不占静态存储空间,函数调用结束后立即释放。
最后
以上就是超级彩虹为你收集整理的牛客网C++刷题六的全部内容,希望文章能够帮你解决牛客网C++刷题六所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复