malloc 接触未分配的内存

malloc touching unallocated memory

我想知道为什么我的分配有效。我创建了 ptr 这是一个指针,ptr2 是一个与 ptr.

在同一位置的指针

这是我的代码:

int* ptr = malloc(sizeof(int));
int* ptr2 = ptr;
*ptr2 = 1;
ptr2 = ptr+1;
*ptr2 = 2;

最后我得到了一个包含两个整数的数组:

ptr[0] = 1
ptr[1] = 2

我的问题是:为什么我可以在没有错误或警告的情况下将值 2 更改为 ptr2?我只 malloc()-ed 了数组中的一个整数位置,不是吗?

这里的问题是,说

  ptr2 = ptr+1;

您指的是超出限制的内存。接下来在取消引用时,您调用 undefined behavior。现在,UB 的结果无论如何都无法证明。

C 中没有任何内容可以阻止您 访问越界(或无效)内存,但这样做的结果是 UB。

也就是说,这只是一个建议,在使用该指针之前,您应该始终检查 malloc() 的返回值,以通过取消引用 NULL 指针来避免 UB,以防 malloc() 失败.