动态realloc分配结构体数组
时间: 2023-09-26 07:08:15 浏览: 138
动态地重新分配结构体数组的内存,可以使用realloc函数。realloc函数可以根据新的大小来重新调整已分配内存的大小,并返回指向调整后的内存块的指针。
下面是一个示例代码,演示如何使用realloc函数动态分配和重新分配结构体数组的内存:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int id;
char name[20];
} Person;
int main() {
int size = 5; // 初始数组大小
Person* people = (Person*)malloc(size * sizeof(Person)); // 初始内存分配
if (people == NULL) {
printf("内存分配失败\n");
return 1;
}
// 初始化结构体数组
for (int i = 0; i < size; i++) {
people[i].id = i;
sprintf(people[i].name, "Person %d", i);
}
// 打印初始结构体数组
for (int i = 0; i < size; i++) {
printf("ID: %d, Name: %s\n", people[i].id, people[i].name);
}
// 重新分配内存大小为10
size = 10;
people = (Person*)realloc(people, size * sizeof(Person));
if (people == NULL) {
printf("内存重新分配失败\n");
return 1;
}
// 打印重新分配后的结构体数组
for (int i = 0; i < size; i++) {
printf("ID: %d, Name: %s\n", people[i].id, people[i].name);
}
free(people); // 释放内存
return 0;
}
```
在示例代码中,首先使用malloc函数分配了一个大小为5的结构体数组的内存。然后,通过对结构体数组进行初始化和打印操作。
接着,使用realloc函数将结构体数组的大小重新分配为10。如果realloc函数调用成功,它会返回一个指向调整后内存块的指针,并且原来分配的内存块会被自动释放。
最后,释放结构体数组的内存,避免内存泄漏。
需要注意的是,使用realloc函数时,需要判断返回的指针是否为NULL,以防止内存分配或重新分配失败。
阅读全文