我是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 ...}我基本上试图返回一个附加的字符串,但我收到以下错误:“错误:函数返回局部变量的地址”,任何建议,如何解决这个问题?
3 回答
千万里不及你
TA贡献1784条经验 获得超9个赞
局部变量的生命周期仅在定义它的块内部延伸。当控件超出定义局部变量的块之外时,不再分配(不保证)变量的存储。因此,使用变量的生命周期区域外的变量的内存地址将是未定义的行为。
另一方面,您可以执行以下操作。
char *str_to_ret = malloc (sizeof (char) * required_size);
.
.
.
return str_to_ret;
并使用str_to_ret相反。当returning时str_to_ret,malloc将返回分配的地址。分配的内存malloc是从堆中分配的,其堆的生命周期跨越程序的整个执行。因此,您可以在程序运行时随时随地访问内存位置。
另请注意,在完成分配的内存块之后,这是一个很好的做法,free它可以避免内存泄漏。释放内存后,无法再次访问该块。
- 3 回答
- 0 关注
- 689 浏览
添加回答
举报
0/150
提交
取消