我是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 關注
- 730 瀏覽
添加回答
舉報
0/150
提交
取消