首页 > 解决方案 > 使用 malloc 时堆与堆栈内存

问题描述

在以下代码中:

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。这是怎么发生的,如果堆栈和堆应该是两个不同的内存段,我必须只得到一个作为输出,因为我在堆中只为一个字符分配了内存。

标签: c

解决方案


你只是在堆上为一个charin分配空间a,但你正在写三个。另外两个不会神奇地进入堆栈。他们只是覆盖了其他一些可能很重要的值,这些值恰好在你分配的那个值之后。你的程序很简单,不会在你的脸上爆炸,但它仍然是未定义的行为来做到这一点。C 没有边界检查,所以它不会让你免于这个错误。


推荐阅读