使用malloc

时间:2018-10-06 04:22:30

标签: c

在以下代码中:

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 作为输出,因为我只为一个字符分配了堆中的内存。

1 个答案:

答案 0 :(得分:0)

您仅在堆中为char中的一个a分配了空间,但是您正在编写三个。另外两个不会神奇地进入堆栈;它们只是覆盖了其他一些可能很重要的值,而该值恰好在您分配的值之后。您的程序非常简单,不会在您的面前炸死,但是执行此操作仍然是未定义行为。 C没有边界检查,因此不会使您免于这个错误。