鉴于以下结构和功能:
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;
}
请解释为什么在调用函数时出现分段错误。
经过对此功能和其他功能的一些试验和错误后,我认为它与我如何访问“**列表”有关。我可以评论与**列表有关的区域,它似乎工作正常。
答案 0 :(得分:0)
我相信你首先必须初始化你的矢量,就像这样
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));
答案 1 :(得分:0)
以下问题是:
*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