这是我正在尝试做的事情:
1. 创建一个结构体指针数组。
2. 使用 malloc
的结构填充数组。
3. 然后用新的 malloc
结构体替换数组中的一个元素
4.没有内存泄漏。
我在下面编写了一个测试程序,但由于对 memcpy
的调用无效读取和写入,出现了段错误。我做错了什么?
#include <stdlib.h>
#include <string.h>
struct my_struct {
int a;
int b;
};
int main(int argc, char *argv[])
{
struct my_struct **my_arr;
my_arr = (struct my_struct **) malloc(10 * sizeof(struct my_struct *));
int i;
for (i = 0; i < 10; i++) {
struct my_struct *my_str = (struct my_struct *) malloc(sizeof(struct my_struct *));
my_arr[i] = my_str;
}
free(my_arr[0]);
memcpy(my_arr[0], my_arr[1], sizeof(struct my_struct *) * 9);
my_arr[9] = (struct my_struct *) malloc(sizeof(struct my_struct *));
for (i = 0; i < 10; ++i) {
free(my_arr[i]);
}
free(my_arr);
}
最佳答案
free(my_arr[0]);
memcpy(my_arr[0], my_arr[1], sizeof(struct my_struct *) * 9);
这是问题,您首先free(my_arr[0])
,然后将my_arr[1]
复制到它指向的地址。
释放内存后您不应该访问它。 并且也在 manpage 中指定
[...]The memory areas must not overlap. Use memmove if the memory areas do overlap.
你再次这样做 -
my_arr[9] = (struct my_struct *) malloc(sizeof(struct my_struct *));
因此,失去了对其指向的先前内存块的引用。
关于c - 插入和操作结构体指针的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33295154/