为什么我的 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
对象或一个带有字符串负载的节点链表?
我正在尝试使用 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
对象或一个带有字符串负载的节点链表?