malloc 接触未分配的内存

Cou*_*uim 1 c arrays malloc memory-management dynamic-memory-allocation

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

这是我的代码:

int* ptr = malloc(sizeof(int));
int* ptr2 = ptr;
*ptr2 = 1;
ptr2 = ptr+1;
*ptr2 = 2;
Run Code Online (Sandbox Code Playgroud)

最后,我有一个由两个整数组成的数组:

ptr[0] = 1
ptr[1] = 2
Run Code Online (Sandbox Code Playgroud)

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

Sou*_*osh 5

这里的问题是,通过说

  ptr2 = ptr+1;
Run Code Online (Sandbox Code Playgroud)

你指的是内存溢出。接下来在 deerencing 时,您调用undefined behavior。现在,无论如何都不能证明 UB 的结果是合理的。

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

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