以下代码中的分段故障(堆芯转储)



给定以下结构和函数:

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 的返回值

相关内容

  • 没有找到相关文章

最新更新