我是 C 初学者,正在自学。
我正在创建以下函数:
char *foo(int x){
if(x < 0){
char a[1000];
char b = "blah";
x = x - 1;
char *c = foo(x);
strcpy(a, b);
strcat(a, c);
return a;
}
blah ...
}
我基本上试图返回附加字符串,但出现以下错误:
“错误:函数返回局部变量的地址”,有什么建议,如何解决这个问题?
局部变量的生命周期仅在定义它的块内延伸。一旦控件超出定义局部变量的块,就不再分配该变量的存储空间(不保证)。因此,在变量的生命周期区域之外使用变量的内存地址将是未定义的行为。
另一方面,您可以执行以下操作。
char *str_to_ret = malloc (sizeof (char) * required_size);
.
.
.
return str_to_ret;
并使用str_to_ret
反而。什么时候return
ing str_to_ret
,分配的地址malloc
将被退回。分配的内存由malloc
从堆中分配,其生命周期跨越程序的整个执行过程。因此,您可以在程序运行时随时从任何块访问内存位置。
另请注意,在完成分配的内存块后,这是一个很好的做法,free
它可以防止内存泄漏。一旦释放内存,您就无法再次访问该块。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)