グラフを分割するプログラムを書いています。GraphクラスとAlgorithmクラスを取得しました。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;
}
私のアルゴリズムクラスでは、次のように呼んでいます。
Edge** separators;
Graph** subgraphs;
int somePartitioning;
g->bisectGraph(somePartitioning, subgraphs, separators);
これまでのところ正常に動作しますが、たとえば次のようにセパレータ配列で作業したい場合は、次のようになります。
for(int i=0; separators[i]!=NULL, i++){
...
}
私は常にセグメンテーション違反を起こします。dddは、bisectGraphの最後にセパレーターにいくつかのコンテンツが含まれていることを教えてくれます。他に間違いが見つからないので、コンセプトが間違っていると思いますか?