Malloc和Realloc结构数组

Jas*_*Per 1 c arrays malloc struct realloc

我正在定义一种结构

typedef struct structs{
int freeSpace;
} structs;   
Run Code Online (Sandbox Code Playgroud)

我正在创建一个指向结构的指针

structs* arrayOfStructs;
Run Code Online (Sandbox Code Playgroud)

我正在为该结构的5号数组分配内存

arrayOfStructs = malloc(5 * sizeof (arrayOfStructs));
arrayOfStructs[3].freeSpace = 99;
printf("\n%d", arrayOfStructs[3].freeSpace);
Run Code Online (Sandbox Code Playgroud)

在某些时候,我将该内存重新分配给大小为10的数组

arrayOfStructs = realloc(arrayOfStructs, 10 * sizeof (arrayOfStructs));
arrayOfStructs[8].freeSpace = 9;
printf("\n%d", arrayOfStructs[8].freeSpace);
Run Code Online (Sandbox Code Playgroud)

在这里,我在阵列的第13位设置了自由空间17,我希望它只有10个位置.

arrayOfStructs[13].freeSpace = 17;
printf("\n%d", arrayOfStructs[13].freeSpace);
free(arrayOfStructs);
Run Code Online (Sandbox Code Playgroud)

这为什么有效?我究竟做错了什么 ?

Bat*_*eba 5

程序的行为未定义.

您正在访问不属于您的内存.

(可能正在发生的是realloc从操作系统获得比实际需要更多的内存).