给定以下结构和函数:
typedef struct VectorT
{
NodeT **list;
int capacity;
int size;
} VectorT;
VectorT* newVector(int capacity)
{
struct VectorT *vector;
*vector->list = (NodeT*) malloc(capacity * sizeof(NodeT));
vector->capacity = capacity;
vector->size = 0;
return vector;
}
请解释为什么在调用函数时出现分段错误。
经过这个功能和另一个功能的反复尝试,我相信这与我访问"**列表"的方式有关。我可以评论出与**列表有关的领域,它似乎很有效。
我相信你首先必须初始化你的向量,就像一样
struct VectorT *vector=(struct VectorT*)malloc(sizeof(struct VectorT));
此外,初始化列表的行应该是:
vector->list = (NodeT**) malloc(capacity * sizeof(NodeT*));
但是,如果您的列表应该声明为"NodeT*list;"而不是NodeT**,则可以使用初始化它
vector->list = (NodeT*) malloc(capacity * sizeof(NodeT));
问题出在下面一行:
*vector->list = (NodeT*) malloc(capacity * size`of(NodeT));
你试图去引用一些还不是指针的东西。您需要为VectorT
分配内存
VectorT* newVector(int capacity)
{
VectorT *vector = malloc(sizeof(VectorT));
vector->list = malloc(capacity * sizeof(NodeT));
vector->capacity = capacity;
vector->size = 0;
return vector;
}
在现实世界中的代码中,您需要检查malloc
的返回值。根据您使用的是C
还是C++
,您需要强制转换malloc
的返回值