私は周りを見渡しましたが、この質問に対する回答は既に見つかりませんでした。私は各要素が構造体であるハッシュテーブルを作成しようとしています。各構造体には、セルが占有されているかどうかをプログラムに知らせるための変数があります。これを機能させるには、それらをすべてゼロに設定する必要があります。物事はうまく働いていますが、今では(一見ランダムに)私はアクセス違反を受けるでしょう。私はそれを修正したと思ったが、私のアレイを成長させるために来たときに、エラーが再び起き上がり、私がエラーを起こしたと信じさせた。私のポインタの知識はそれほど良くはないので、どんな助けもありがたいです。この関数は次のようになります。ゼロに動的に割り当てられた構造体の配列のメンバ要素を初期化
HashTableCell *initialiseTable(HashTableCell *hashTable, int *tableSizePtr)
{
int i = 0;
int totalSize = *tableSizePtr * sizeof(HashTableCell);
HashTableCell *tempStartingcell;
tempStartingcell = (HashTableCell*)malloc(sizeof(HashTableCell));
*tempStartingcell = *hashTable;
while (i <= *tableSizePtr)
{
/*we keep moving forward, need to use the first entry*/
*hashTable = *(tempStartingcell + (i * sizeof(HashTableCell)));
hashTable->isOccupied = 0;
i++;
}
free(tempStartingcell);
return hashTable;
}
そして、私はテーブルのいくつかの領域をmallocさなどのような別の関数でそれを渡された前:
HashTableCell *hashTable;
hashTable = (HashTableCell*)malloc((sizeof(HashTableCell)*tableSize));
hashTable = initialiseTable(hashTable, tableSizePtr);
アイデアが始まり、移動時に開始することですwhileループの反復ごとに正しい数のスペースに沿って移動します。私がサイズを変更するとき、私は単にmallocされたスペースの2倍の新しい配列を作成し、それを初期化関数に渡しますが、これは一見ランダムなインデックスでアクセス違反エラーをスローします。
私はVS2015を使用しています。
ありがとうございました。
を?あなたはデバッガを使いましたか? – qxz