我需要在C语言中编写一个类似于vector
的数据结构。通常我会创建这样的一个结构:
struct Vector
{
int length;
int *elements;
};
还有这样的功能:
void initialize_vector(struct Vector* vector);
void create_vector(struct Vector* vector, int* array, int n);
void remove_vector(struct Vector* vector);
void vector_add_element(struct Vector* vector, int element);
void vector_insert(struct Vector* vector, int index, int element);
void vector_remove_element(struct Vector* vector, int element);
void vector_remove_at(struct Vector* vector, int index);
现在,initialize_vector()
函数,我只是想将向量属性初始化为默认值(如将length
设置为0,将*elements
设置为NULL)。我写了这样的代码:
void initialize_vector(struct Vector* vector)
{
vector->elements = NULL;
vector->length = 0;
}
我试着检查它是否有效,于是我写了这段代码:
#include <stdio.h>
#include "vector.h"
int main(int arc, char** argv)
{
struct Vector* vec;
initialize_vector(vec);
printf("%d\n", vec->length);
return 0;
}
我遇到了著名的“分割错误”,于是我在GDB上进行了检查,当然,一切都失败的时刻是这一行:
vector->elements = NULL;
。我不知道问题出在哪里。我声明了一个向量,我想我已经正确地传递了它,但它出现了问题。我知道这可能是微不足道的,而且我可能会被一些超级程序员狂批,但是,不问则不学嘛。
struct Vector* vec;
更改为struct Vector vec;
,将initialize_vector(vec);
更改为initialize_vector(&vec);
以传递指向结构体的指针给函数。 2: 使用 malloc() 创建一个 Vector 实例。 - Grifplexstruct
没有分配内存。 - Weather Vanestruct Vector
的 指针。指针并不等同于它所指向的类型!在编程中,细节至关重要!"一切都搞砸的时刻就是这一行..." - 你早就搞砸了!编译器警告不是闹着玩的!启用它们并且认真对待! - too honest for this site