Malloc 和 Realloc 结构数组
Malloc and Realloc array of structs
我正在定义一种结构
typedef struct structs{
int freeSpace;
} structs;
我正在创建一个指向结构的指针
structs* arrayOfStructs;
我正在为该结构的大小为 5 的数组分配内存
arrayOfStructs = malloc(5 * sizeof (arrayOfStructs));
arrayOfStructs[3].freeSpace = 99;
printf("\n%d", arrayOfStructs[3].freeSpace);
在某些时候,我将该内存重新分配给大小为 10 的数组
arrayOfStructs = realloc(arrayOfStructs, 10 * sizeof (arrayOfStructs));
arrayOfStructs[8].freeSpace = 9;
printf("\n%d", arrayOfStructs[8].freeSpace);
这里我在数组的第 13 位设置了自由空间 17,我希望它只有 10 个位置。
arrayOfStructs[13].freeSpace = 17;
printf("\n%d", arrayOfStructs[13].freeSpace);
free(arrayOfStructs);
为什么这行得通?我做错了什么?
程序的行为是未定义。
您正在访问不属于您的内存。
(很可能发生的情况是 realloc
从操作系统获取的内存比实际需要的多)。
我正在定义一种结构
typedef struct structs{
int freeSpace;
} structs;
我正在创建一个指向结构的指针
structs* arrayOfStructs;
我正在为该结构的大小为 5 的数组分配内存
arrayOfStructs = malloc(5 * sizeof (arrayOfStructs));
arrayOfStructs[3].freeSpace = 99;
printf("\n%d", arrayOfStructs[3].freeSpace);
在某些时候,我将该内存重新分配给大小为 10 的数组
arrayOfStructs = realloc(arrayOfStructs, 10 * sizeof (arrayOfStructs));
arrayOfStructs[8].freeSpace = 9;
printf("\n%d", arrayOfStructs[8].freeSpace);
这里我在数组的第 13 位设置了自由空间 17,我希望它只有 10 个位置。
arrayOfStructs[13].freeSpace = 17;
printf("\n%d", arrayOfStructs[13].freeSpace);
free(arrayOfStructs);
为什么这行得通?我做错了什么?
程序的行为是未定义。
您正在访问不属于您的内存。
(很可能发生的情况是 realloc
从操作系统获取的内存比实际需要的多)。