注册 登录
编程论坛 C语言论坛

开放定址散列 VS实现时出现的警告

WilsonLA 发布于 2020-01-20 22:38, 1486 次点击
程序个人觉得没什么问题,虽然可以运行,但是还是比较想知道,为什么会触发这个警告,这个究竟是vs的bug呢还是代码逻辑的一个难以发现的漏洞呢?希望大佬们不吝赐教!
基本上是书上的代码,用的是 马克艾伦维斯的《数据结构与算法分析》

触发的警告和触发警告的位置在下面

头文件代码如下(省去了各函数原型)
程序代码:

typedef unsigned long long Index;
typedef char* eletype;
typedef struct HashCell Cell;
enum CellInfo {legitimate, Empty, Delete};
struct HashCell
{
    eletype ele;
    enum CellInfo Info;
};

typedef struct HashRecord* HashTable;
struct HashRecord
{
    int tableSize;
    Cell* theCells;
};


触发警告的函数如下
程序代码:

HashTable initializeHash(int tableSzie)
{
    HashTable hashtbl = (HashTable)malloc(sizeof(struct HashRecord));
    if (tableSzie < MINSIZE) Error("initialize hash");
    if (hashtbl)
    {
        hashtbl->tableSize = NextPrime(tableSzie);
        hashtbl->theCells = (Cell*)malloc(sizeof(Cell) * hashtbl->tableSize);
        if (hashtbl->theCells)
        {
            for (int i = 0; i < hashtbl->tableSize; i++)
            {
                /*
                警告    C6386    写入到“hashtbl->theCells”时缓冲区溢出:
                可写大小为“sizeof(Cell)*hashtbl->tableSize”个字节,但可能写入了“16”个字节。
               
*/
                hashtbl->theCells[i].ele = NULL;//此处触发以上警告
                hashtbl->theCells[i].Info = Empty;
            }
        }
        else Error("initialize hash 1");
    }
    else Error("initialize hash 2");
    return hashtbl;
}

1 回复
#2
叶纤2020-01-21 00:06
小白看不懂只能看懂typedef    enum,这个代码安全性很高啊,大佬们都睡了,要想解决等明天吧,洗刷刷也没的用滴哦

[此贴子已经被作者于2020-1-21 00:13编辑过]

1