首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

今天小弟我来日经贴,还是malloc的有关问题…

2012-05-15 
今天我来日经贴,还是malloc的问题……在《数据结构与算法分析》中看到的实现第一个例子:(开放地址散列表)结构

今天我来日经贴,还是malloc的问题……
在《数据结构与算法分析》中看到的实现

第一个例子:(开放地址散列表)
结构体定义

C/C++ code
struct HashEntry{    ElementType Element;    enum KindOfEntry Info;};typedef struct HashEntry Cell;struct HashTbl{    int TableSize;    Cell *TheCells;};


初始化
C/C++ code
HashTable InitializeTable( int TableSize ){    HashTable H;    int i;    if ( TableSize < MinTableSize )    {        printf("Table size too samll!\n");        return NULL;    }    if ( (H = malloc(sizeof(struct HashTbl))) == NULL )    {        perror("OUT OF SPACE!");        return NULL;    }    H->TableSize = TableSize;    for ( i = 0; i < TableSize; i++ )    {        H->TheCells[i].Info = Empty;    }    return H;}


对于H->TheCells[i],没有分配内存就可以直接使用?

再看另一个例子(分离连接散列表)
结构体定义
C/C++ code
struct ListNode{    ElementType Element;    Position Next;};typedef Position List;struct HashTbl{    int TableSize;    List *TheLists;};


初始化
C/C++ code
HashTable InitializeTable( int TableSize ){    HashTable H;    int i;    if ( TableSize < MinTableSize )    {        printf("Table Size Too Small!\n");        return NULL;    }    if ( (H = malloc(sizeof(struct HashTbl))) == NULL )    {        perror("OUT OF SPACE!");        return NULL;    }//    H->TableSize = NextPrime( TableSize );// 素数大小    H->TableSize = TableSize;    if ( (H->TheLists = malloc(sizeof(List)*H->TableSize)) == NULL)    {        perror("OUT OF SPACE!");        return NULL;    }    for (i = 0; i < H->TableSize; i++)    {        if ( (H->TheLists[i] = malloc(sizeof(struct ListNode))) == NULL )        {            perror("OUT OF SPACE!");            return NULL;        }        H->TheLists[i]->Next = NULL;    }    return H;}


这个例子里面又十分谨慎地进行了malloc,看得好糊涂,求指点!!!

[解决办法]
第一个例子用法错了,运行大概会直接出错
[解决办法]
嗯,第一个程序肯定会报错的。
第二个问题是:Position是什么??由于不知道Position是什么,导致了我不知道你的 *TheLists是什么,从而导致了不知道你的H->TheLists[i] = malloc(sizeof(struct ListNode))是否正确了。
[解决办法]
扔了这本书吧,除了有错,数据结构的实现也是很垃圾的,从H->TheLists = malloc(sizeof(List)*H->TableSize)一行就看得出来,还没存数据就给每个桶分配了一个静态NODE,根本没法用,浪费,设计烂,和之后插入的单一动态NODE格格不入,一看就是某导师让俩半吊子学生写的书。

热点排行