以下代码中的分段错误(Core Dumped)

时间:2015-02-23 02:58:21

标签: segmentation-fault

鉴于以下结构和功能:

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;
}

请解释为什么在调用函数时出现分段错误。

经过对此功能和其他功能的一些试验和错误后,我认为它与我如何访问“**列表”有关。我可以评论与**列表有关的区域,它似乎工作正常。

2 个答案:

答案 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