0
我在做一個簡單的哈希表和一個哈希函數。表中的每個元素都有一個指向另一個節點的指針,該指針在發生衝突時由插入函數使用。問題是當碰撞發生時,我的代碼在導航鏈表時崩潰。下面是代碼(對不起,如果這是一個有點冗長):導航鏈表時無法訪問指針
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "hash.h"
#define TAM 50
int funcaoHash(int chave, char nome[50]) //Hash function
{
int i;
int hash = chave;
for(i = 0; nome[i] != '\0'; i++)
{
hash = hash + (int)nome[i];
}
hash = hash%TAM;
return hash;
}
void insere(int chave, char nome[50], itemTabela* TabelaHash[TAM]) //Insert function
{
int idx = funcaoHash(chave, nome);
itemTabela* ItemAux = (itemTabela*)malloc(sizeof(itemTabela));
itemTabela* ptrAux = NULL;
ItemAux->chave = chave;
strcpy(ItemAux->nome, nome);
if(TabelaHash[idx] == NULL) //No collision occurred
TabelaHash[idx] = ItemAux;
//If there is a collision
else
{
ptrAux = TabelaHash[idx]->ptr;
//Here the code breaks
while(ptrAux->ptr != NULL)
{
ptrAux = ptrAux->ptr;
}
ptrAux = ItemAux;
}
}
void inicializaTabela(itemTabela* TabelaHash[TAM]) //Initialize tabl
{
int i;
for(i = 0; i < TAM; i++)
TabelaHash[i] = NULL;
}
這裏是節點結構:
typedef struct itemTabela
{
char nome[50];
int chave;
struct itemTabela* ptr;
}itemTabela;
,這裏是主要的功能:
int main()
{
itemTabela *ptrTabela[TAM] = {};
inicializaTabela(ptrTabela);
insere(6, "Chico", ptrTabela);
insere(6, "Chico", ptrTabela);
return 0;
}
上午我訪問指向錯誤的方式或進行一些回訪? 感謝您的時間!
「的問題是,當碰撞發生時我的代碼時,它的導航鏈接列表只是崩潰。」 - 什麼是崩潰?你是否使用調試器試圖自己弄清楚這一點? –
是的!調試器說它不能訪問下一個指針的內存。 下面是它的確切字眼:「無法訪問地址0xbaadf045處的內存」 –
哪種說法發生了?什麼指針有這個價值? – Barmar