c语言 - 导航链表时无法访问指针



我正在制作一个简单的哈希表和一个哈希函数。表的每个元素都有一个指向碰撞发生时插入函数使用的另一个节点的指针。问题是,当碰撞发生时,我的代码在导航链接列表时会崩溃。这是代码(对不起,如果有点冗长(:

#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] != ''; 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;
}

我是以错误的方式访问指针还是进行一些回肠访问?感谢您的时间!

1(ItemAux的初始化还需要ptr初始化。像ItemAux->ptr = NULL;

2(

    ptrAux = TabelaHash[idx]->ptr;
    //Here the code breaks
    while(ptrAux->ptr != NULL)
    {
        ptrAux = ptrAux->ptr;
    }
    ptrAux = ItemAux;

应该是

    ptrAux = TabelaHash[idx];
    while(ptrAux->ptr != NULL)
    {
        ptrAux = ptrAux->ptr;
    }
    ptrAux->ptr = ItemAux;

相关内容

  • 没有找到相关文章

最新更新