【发布时间】:2018-09-20 16:01:33
【问题描述】:
所以我已经学习 C 大约一年多了,在我的学习中我从未想过这是可能的:
#include <stdio.h>
#include <stdlib.h>
int main()
{
struct exterior
{
int x;
} *ptr;
ptr = (struct exterior *)malloc(sizeof(struct exterior[3]));
ptr[0].x = 1;
ptr[1].x = 2;
ptr[2].x = 3;
ptr[3].x = 4;
ptr[4].x = 5;
ptr[5].x = 6;
printf("%d %d %d %d %d %d", ptr[0].x, ptr[1].x, ptr[2].x, ptr[3].x, ptr[4].x, ptr[5].x);
return 0;
}
所以一开始我遵循C的规则;我将 3 个结构数组元素所需的内存分配给了一个结构指针。我使用指针来访问结构中的变量,同时使用索引来指定结构数组元素。
出于某种原因,然后我决定尝试访问超出给定限制的数组元素,即使我知道结果可能是程序崩溃,但我还是这样做了。
令我惊讶的是,没有崩溃。
相反,该程序有效。它打印出我给变量的值,没有问题。这怎么可能?
后来,我尝试使用 int 数组。它也有效!我做错了吗?
【问题讨论】:
-
请尝试在任何搜索引擎上搜索...
-
这个程序所做的只是在相邻的内存位置写入数据,但是accessing memory beyond the array boundaries is undefined behavior
-
所以,即使有可能,我也不应该这样做,因为这只是它不打算做的事情?
-
C 不会阻止你朝自己的脚开枪。如果你告诉它在随机内存中大便,它会的。你得到的结果是任何人的猜测。
标签: c arrays pointers malloc structure