gpt4 book ai didi

c - 使用 malloc 时的堆内存与堆栈内存

转载 作者:行者123 更新时间:2023-11-30 16:27:41 25 4
gpt4 key购买 nike

在下面的代码中:

int main(void)
{
char* a = malloc(sizeof(char));
a[0] = 'a';
a[1] = 'b';
a[2] = 'c';
printf("%s", a);
}

根据。对我来说, a[0] 是从堆中分配内存,而 a[1] 和 a[2] 位于堆栈上。我得到以下代码的输出为abc。这是怎么发生的,如果堆栈和堆应该是两个不同的内存段,我必须只得到 a 作为输出,因为我在堆中只为一个字符分配了内存。

最佳答案

您仅在堆上为 a 中的一个 char 分配空间,但您正在编写三个。另外两个不会神奇地进入堆栈;它们只是覆盖了恰好位于您分配的值之后的其他一些可能重要的值。你的程序足够简单,不会在你面前爆炸,但这样做仍然是未定义的行为。 C 没有边界检查,所以它不会让你避免这个错误。

关于c - 使用 malloc 时的堆内存与堆栈内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52675677/

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