c ++ NULL终止数组段错误

时间:2012-07-16 11:41:28

标签: c++ arrays

我正在编写一个分割图形的程序,我上了一堂课 图和算法类。我在Algorithm类中计算分区,并根据分区用Graph类中的方法拆分图。

我的代码如下所示: 在我的GraphClass中:

void bisectGraph(int *iPartitioning, Graph **Subgraphs, Edge **Separator){
...
    // Store separators in an array
Separator = new Edge*[Separators.size()+1]; //Separators is a vector containing the separating edges
if(Separator == NULL)
    writeErrorMsg("Error assigning memory.", "Graph::bisectGraph");
for(i=0, SepIter = Separators.begin(); SepIter != Separators.end(); i++, SepIter++)
    Separator[i] = *SepIter;
Separator[Separators.size()] = NULL;

}

在我的算法clas中,我称之为:

Edge** separators;
Graph** subgraphs;
int somePartitioning;

g->bisectGraph(somePartitioning, subgraphs, separators);

到目前为止工作正常,但是当我想在我的分隔符数组上工作时,例如:

for(int i=0; separators[i]!=NULL, i++){
    ...
}

我总是遇到分段错误。 ddd告诉我,在bisectGraph分隔符的末尾包含一些内容。既然我找不到任何其他错误,我认为我有一些错误概念?

1 个答案:

答案 0 :(得分:1)

Separator的新值未传播到函数调用之外的separators变量。即使它有类型Edge **,你在函数内部分配它,但它只分配给函数的变量副本。请记住,除非另有说明,否则C ++是按值传递的。

您可以将签名更改为Edge **&,但使用矢量更明智,并使用vector<Edge *> &类型的参数。