首页 > 解决方案 > 无法释放父结构的子结构

问题描述

我有一个奇怪的错误,我无法释放()我 malloc()'d RAM 的结构。

我有一个结构父母和孩子,其中孩子是一个int结构。我使用 malloc() 为父结构和子结构分配 ram(其中子结构是 malloc() 到子结构数组的大小)。然后我使用 memcpy 将数组复制到父结构。

#include <stdlib.h>
#include <stdio.h>
#include <string.h> 

typedef struct child child_t;
typedef struct parent parent_t;

struct child {
    int item;
};

struct parent {
    child_t *_child;
};

child_t list[] = {
    { .item = 1 },
    { .item = 2 },
    { .item = 3 },
};

int main(void) {
    parent_t *_parent = malloc(sizeof(parent_t));

    _parent->_child = malloc(sizeof(list));
    memcpy(&_parent->_child, &list, sizeof(list));

    free(_parent->_child);
    free(_parent);
    printf("success\n");
    return 1;
}

free(_parent->_child);只是最终给我 Aborted (core dumped) 作为错误。我检查了 ram 的使用情况,我可以告诉我应该释放孩子,但我不知道该怎么做。

标签: cmemorystructmalloc

解决方案


您应该从语句中删除&s 。已经是一个地址,数组将衰减为一个指针。您正在做的事情是覆盖指针成员本身(和其他)而不是它指向的内存。memcpy_parent->_childlist[]

memcpy(_parent->_child, list, sizeof(list));

这就是为什么你不能

free(_parent->_child);

因为你破坏了你试图指向的指针free


推荐阅读