C 中释放结构体的函数

Jac*_*son 2 c malloc free struct memory-management

我遇到一个问题,当我调用我编写的用于释放结构的函数时,我的程序在第一个释放指令处终止。

这是函数:

void deleteJobNode(struct jobNode *node) {
    free(node->burstTime);
    free(node->jobIndex);
    free(node->next);
    free(node->priority);
    free(node->remainingTime);
    free(node);
}
Run Code Online (Sandbox Code Playgroud)

这是结构体的定义以及用于为结构体分配内存的函数。

struct jobNode {
    struct jobNode *next;
    int jobIndex;
    int burstTime;
    int remainingTime;
    int priority;
};

struct jobNode *createJobNode(int newJobIndex, int newBurstTime, int newRemainingTime, int newPriority) {
    struct jobNode *newNode = (struct jobNode *)malloc(sizeof(struct jobNode));
    newNode->jobIndex = newJobIndex;
    newNode->burstTime = newBurstTime;
    newNode->remainingTime = newRemainingTime;
    newNode->priority = newPriority;

    if(newNode == NULL)
        printf("Node Creation Error");

    return newNode;
}
Run Code Online (Sandbox Code Playgroud)

我已经按照建议编辑了免费功能:

void deleteJobNode(struct jobNode *node) {
    free(node);
}
Run Code Online (Sandbox Code Playgroud)

但是我在运行时收到此错误:

*** Error in `/home/jack7521/workspace/req1b/Debug/req1b': double free or corruption (fasttop): 0x00000000010c2090 ***
Run Code Online (Sandbox Code Playgroud)

Jac*_*ack 5

free每个你都需要一个malloc. 您不需要释放 a 的非动态字段struct,它们已经是其struct自身的一部分,因此释放指向整体的指针struct就足够了。

您只需要:

free(node);
Run Code Online (Sandbox Code Playgroud)