gpt4 book ai didi

c - 堆栈段 C 数组

转载 作者:太空宇宙 更新时间:2023-11-04 05:11:47 25 4
gpt4 key购买 nike

我在一个页面中看到了一个示例,该示例概述了在 C 结构中表示字符串的各种方法。它解释了在 main 之外的函数中定义的数组将存储在堆栈段中,因此在其返回后不一定存在,可能会导致运行时错误。

突出显示的可能重复解释了返回时数组失败的原因,即返回的指向元素 0 的指针不再有效,但未显示相同存储类(自动)的变量成功的原因是它们通过了 A移除堆栈帧后仍然存在的值

“下面的程序可能会打印一些垃圾数据,因为字符串存储在函数 getString() 的堆栈帧中,而在 getString() 返回后数据可能不存在。”

char *getString() 
{
char str[] = "GfG"; /* Stored in stack segment */

/* Problem: string may not be present after getSting() returns */
return str;
}
int main()
{
printf("%s", getString());
getchar();
return 0;
}

我知道其他局部 C 变量也将在它们各自的堆栈帧中定义,并且显然它们可以返回,所以为什么这对数组来说是个问题?

谢谢

最佳答案

这应该大致解释了发生了什么,从 getString() 返回后,它的堆栈不再有效。

         ^            ^ 
| not valid | ^ ^
+------------+ | not valid |
str--> | "GfG" | | not valid | <---+
| --- | | not valid | |
| stack of | +------------+ |
| getString | | return(str)| ----+
+------------+ | --- |
| | | |
| stack of | | stack of |
| main() | | main() |
+------------+ +------------+

如果用 gcc -W -Wall 编译(应该总是使用这些选项),它应该给出警告:

warning: function returns address of local variable [-Wreturn-local-addr]

关于c - 堆栈段 C 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54776872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com