为什么我的 free(struct LinkedList) 调用会导致分段错误?

Why is my free(struct LinkedList) call causing a segmentation fault?

我正在尝试使用 malloc 实现链表。我的链接列表被称为 Vector 因为我认为模仿 C++.

是有意义的

因此,在 initVector 中的第一个 TODO 中,我认为自己搞砸了。 我没有调用 malloc() 来添加通过的 Vector。那没有用。我什至在声明 struct Vector a 后立即尝试:

struct Vector a = malloc(sizeof(struct Vector));

然而这也不起作用。我需要做什么才能为我的 LinkedList 正确分配内存?

我的第二个 TODO 说明了段错误发生的位置。

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

// 
// 

struct Vector {
    char *index;
    struct Vector *next;
    size_t used;
    size_t size;
};

void initVector(struct Vector *a, size_t initialSize) {

    a = malloc(initialSize * sizeof(struct Vector)); //TODO: --1-- this i am just trying. i don't know how to do this because my free function is not working
    a->index = malloc(initialSize * sizeof(char));
    a->next = malloc(sizeof(struct Vector));
    a->used = 0;
    a->size = initialSize;
}

void insertVector(struct Vector *a, char *element) {
    if (a->used == a->size) {
        a->size *= 2;
        a = realloc(a, a->size * sizeof(struct Vector));
    }
    a->used++;
    a->index = element;
} // Adds an element to the index. If the allocated size is at the cap, it reallocates the current amount multiplied by two

void freeVector(struct Vector *a) {
    free(a); //TODO: --1-- code segfaults here
    a = NULL;
    a->used = a->size = 0;
}

int main(int argc, char* argv[]) {     
    struct Vector a;
    char *st = argv[1];
        
    initVector(&a, 5);  // initially 5 elements
    insertVector(&a, st);
        
    printf("%s\n", a.index);
        
    freeVector(&a);
    return 0;
}

您遇到段错误是因为您试图释放一个未通过 malloc() 或类似函数分配的对象:freeVector(&a); 显然传递了本地 Vector 的地址具有自动存储功能的对象。

您的数据结构非常混乱:您是否正在尝试实现一个动态分配的数组对象,类似于 C++ vector 对象或一个带有字符串负载的节点链表?