1
下の展開機能に間違った何かが見えますか?私はいくつかのコンテキストを与えるために、クラスのプライベートセクションと私のvertex_node構造体を含めました。なぜそれが適切に拡大していないのか分かりません。どんな助けもありがとう。グラフの展開機能が適切に展開されていません
private:
//list is pointers to vertex nodes;
struct vertex_node {
string name;
set <string> edges;
};
vertex_node **list;
void Graph:: expand()
{
int new_cap = capacity * 2+1;
//creates new larger array
vertex_node **larger_array = new vertex_node*[new_cap];
//loop through all elements of old array
for(int i = 0; i<capacity; i++){
if(list[i] != NULL){
//rehash each element and place it in new array
int a = hash_string(list[i]->name) % new_cap;
larger_array[a] = new vertex_node;
larger_array[a]->name = list[i] -> name;
larger_array[a]->edges = list[i] -> edges;
}
//delete old list
delete[] list;
list = larger_array;
capacity = new_cap;
}
}
「容量」とは何ですか?どのように初期化されますか?あなたは、[最小、完全で、かつ実証可能な例](http://stackoverflow.com/help/mcve)を作成して私たちを見せてください。 –
'delete [] list'は' list'の各要素で 'i'を繰り返しながら実行され、各繰り返しごとにgreater_arrayにも割り当てられ、次の繰り返しが削除されます。しかし、実際のコードが適切にコピーされていない可能性があります。 –
ちなみに 'new'は初期化されませんが、デフォルトのコンストラクタがあれば呼び出されますが、ポインタや他のネイティブ型(' int'や 'double'など)にはデフォルトはありませんコンストラクタ。つまり、あなたが割り当てた配列内のポインタは* indeterminate *値を持ち、 'list [i]!= NULL'のチェックがあるときは*未定義の動作*を与えます。私はあなたが行うことをお勧めします。 'new vertex_node * [new_cap](nullptr)'を実行すると、すべてのポインタがNULLポインタに初期化されます。そして、最初の割り当てのために同じことをしてください。 –