C - 我的记忆释放功能有什么问题?

Yia*_*nis 1 c free struct pointers memory-management

我有一个结构,其中包含2个整数和一个指向另一个结构的指针.我首先为struct分配内存然后为指针分配内存.当我释放内存时,我先释放指针,然后释放结构.

当我运行我的程序并调用释放内存的函数时,它会在调用时崩溃.当我不调用释放内存的函数时它工作正常,但后来我没有释放内存.

我尝试删除释放分配给指针的内存的行,程序不会崩溃,但我不认为这是正确的,因为每个"malloc/calloc"都需要"免费"吗?任何人都认为释放功能有问题吗?

//Define a struct data type
struct q_element
{
    //Declaration of struct members
    int element;
    int priority;
    struct q_element *next_element;
};

//Method to allocate memory
struct q_element* allocateStruct()
{
    //Declaration of a variable
    struct q_element *e;

    //Allocate memory for one queue element
    e = malloc(sizeof(struct q_element));

    //Allocate memory for one pointer to a queue element
    e->next_element = calloc(1,sizeof(struct q_element*));

    //Initialize integer members of queue element
    e->element = 0;
    e->priority = 0;

    return e;
}

//Method to free memory allocated
void freeStruct(struct q_element* e)
{
    //Free up pointer member
    free(e->next_element);

    //Free up struct
    free(e);
}
Run Code Online (Sandbox Code Playgroud)

ala*_*ain 5

您不需要为next_element指针分配内存.指针已经存在,就像int element例如一样.

因此,如果您只想分配一个元素,可以将next_element指针设置为NULL一切正常.