为什么我不能使用指针添加而不是malloc

Ern*_*rno 3 c malloc pointers

我想知道为什么我必须使用malloc动态创建记忆,而我已经有了指针添加来自由操纵记忆.所以我创建了这段代码,但是这段代码腐败了,说'围绕变量'a'的堆栈被破坏了

有人能解释为什么这段代码失败了?

#include <stdio.h>

int main(void)
{
    int a = 1;
    int * arr1 = &a;
    *(arr1 + 1) = 2;
    printf("%d %d\n", *arr1, *(arr1+1));
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*rtz 5

您不知道实现可能存储的内容&a + 1.它可能是维持操作环境健全性所需的关键信息.尽管不知道它可能用于什么,你可以修改它.所以一切都会发生.

不要写入不属于你的记忆!