哈希表程序崩溃

时间:2014-04-01 16:40:47

标签: c hashtable

我想知道我的节目是否出错了。

我设法创建HashTable但是当我通过参数将其发送到我的displayingList()函数时,它会崩溃。

source.c (包含我的功能):

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <math.h>
#include "header.h"

#define MAX 255

int countLetters(char myStr[])
{
    int myLen = strlen(myStr), i;
    int wordLen = 0;

    for (i = 0 ; i < myLen; ++i)
    {
        wordLen += (int)(myStr[i]);
    }

    return (wordLen%256);
}

void populateList(NodeT *T[255], char myStr[])
{
    NodeT *p, *q;

    p = (NodeT *)malloc(sizeof(NodeT));
    strcpy (p->key, myStr);

    int myPos = countLetters(myStr);

    if(T[myPos] == NULL)
    {
        p->next = NULL;
        T[myPos] = p;
    }
    else
    {
        q = T[myPos];
        p->next = q;
        T[myPos] = p;
    }

}

void displayList(NodeT *T[255])
{
    int i;
    NodeT *p;

    for(i = 0 ; i < 255; ++i)
    {
        if(T[i] != NULL)
        {
            printf("Index: %d - Data:", i);

            p = T[i];
            while(p != 0)
            {
                printf("%s, ", p->key); // HERE IT CRASHES.
                p = p->next;
            }

            printf("\n");
        }     
    }

}

main.c (包含int main()):

#include <stdio.h>
#include <stdlib.h>
#include "header.h"


int main(void)
{
    NodeT *T[255];
    int n, i;

    printf("Give no. of elements:");
    scanf("%d", &n);
    fflush(stdin);
    for(i = 0 ; i < n ; ++i)
    {
        char name[100];    
        gets(name);

        populateList(T, name);
    }

    displayList(T);

    return 0;
}

header.h (和我的标题):

#ifndef HEADER_H
#define HEADER_H

typedef struct cell
{
     char key[100];
     struct cell *next;

}NodeT;

int countLetters(char myStr[]);
void populateList(NodeT *T[], char myStr[]);
void displayList(NodeT *T[]);

#endif // HEADER_H

我试着看看调试器到底发生了什么,似乎当我将T[]列表发送到displayList()函数时,实际上它与main.c中的结构不同}。

问题:插入正常,但当我尝试显示我的列表(在每个索引上)时,它会崩溃。

有什么想法吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

可能的解决方案是声明NodeT *T[255]全局。然而,这根本不是最好的做法。