标题:开放定址散列 VS实现时出现的警告
取消只看楼主
WilsonLA
Rank: 1
等 级:新手上路
威 望:1
帖 子:9
专家分:0
注 册:2020-1-20
结帖率:0
已结贴  问题点数:10 回复次数:0 
开放定址散列 VS实现时出现的警告
程序个人觉得没什么问题,虽然可以运行,但是还是比较想知道,为什么会触发这个警告,这个究竟是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;
}

搜索更多相关主题的帖子: Cell 触发 typedef struct 警告 
2020-01-20 22:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-498993-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013903 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved