問題是關于哈希表的索引陣列,它本身由 N 個“結構節點”組成,請參見下面的代碼。陣列的每一個欄位都是一個鏈表的頭部,這個鏈表將在后面填充。
我正在嘗試訪問此陣列的特定索引元素的欄位(如下面“結構節點”中所定義)。
LENGTH 和 N 是之前定義的常量整數,即它們分別是 45 和 5。
typedef struct node
{
char word[LENGTH 1];
struct node *next;
}
node;
// Hash table
node *table[N];
// initialize hashtable
for (int i = 0; i < N; i )
{
(table[i]->next) = NULL;
}
代碼(顯然是較大程式的一部分)編譯正確,但我在除錯時收到“分段錯誤”
(table[i]->next) = NULL
我的猜測是這可能是一個語法問題,因為我在這里看不到任何其他可能的問題。
有人可以幫忙嗎?提前致謝!
uj5u.com熱心網友回復:
Jellyboy的回答為我指明了正確的方向:我需要宣告一個“節點結構陣列”,而不是“指向節點結構的指標陣列”。
所以解決方法很簡單:
node table[N]; // (instead of: node* table[N];
然后我還可以初始化我的哈希表,即這個由 N 個“結構節點”組成的陣列(“表”),這些將作為鏈表的起點。
我被引導到了錯誤的方向,因為在我在此在線課程中收到的分布式“原始代碼”中,有這樣的宣告(其中包括*),我認為我不必更改它。
而且,正如我所說,我對編碼真的很陌生,所以請耐心等待。
uj5u.com熱心網友回復:
宣告
node* table[N];
不是宣告一個節點結構陣列,而是宣告一個指向節點結構的指標陣列。由于我沒有看到您初始化陣列本身的任何地方,我假設您沒有這樣做。
正確的方法是(稍微現代化你的代碼):
struct node
{
char word[LENGTH 1];
struct node *next;
};
// Hash table
std::array<node,N> table;
// initialize hashtable
for ( node& n: table )
{
n.next = nullptr;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/315000.html
下一篇:回傳時雙成為指標?
