我有以下代码,我预计会失败,但似乎工作正常。我对为什么这不会导致某种分段错误感到困惑。
#include <stdio.h>
#include <stdlib.h>
struct entry {
int foo;
};
struct table {
int size;
struct entry* entries;
};
typedef struct table *Table;
typedef struct entry Entry;
int main() {
Table table = malloc(sizeof(struct table));
table->entries = malloc(sizeof(struct entry) * 1);
(table->entries)[5].foo = 5;
for (int i = 0; i < 10; i++) {
printf("Entry #%d: %d\n",i,(table->entries)[i].foo);
}
}
我本来预计,由于我只为 table->entries 中的一个条目分配了足够的空间,因此访问 0 以外的任何索引都将超出范围。但是当我运行这个程序时,它打印出 5 作为索引 5 处条目的 foo 值,其余的为 0,这是正确的行为。为什么这没有失败?