【发布时间】:2017-06-15 18:50:19
【问题描述】:
所以我必须在 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;
}
我得到了著名的Segmentation fault,所以我检查了 GDB,当然,所有事情都搞砸的那一刻是这行:vector->elements = NULL;。
我不知道问题出在哪里。我声明了一个向量,我猜我正确地传递它并且它搞砸了。我知道这可能是微不足道的,我会被一些超级程序员大大否决,但是,嘿,他什么都不质疑什么都学。
【问题讨论】:
-
1:将
struct Vector* vec;更改为struct Vector vec;initialize_vector(vec);为initialize_vector(&vec);以向函数传递指向结构的指针。 2:使用 malloc() 为 Vector 创建一个实例。 -
没有为
struct分配内存。 -
"我声明了一个向量" - 不!您声明并定义了一个指向
struct Vector的指针。指针与其指向的类型不同!细节在编程中很重要! “一切搞砸的那一刻就是这条线......” - 你搞砸了!编译器警告不是为了好玩!启用它们并注意!