| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1235 人关注过本帖
标题:开放定址散列 VS实现时出现的警告
只看楼主 加入收藏
WilsonLA
Rank: 1
等 级:新手上路
威 望:1
帖 子:9
专家分:0
注 册:2020-1-20
结帖率:0
收藏
已结贴  问题点数:10 回复次数:1 
开放定址散列 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
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:10 
小白看不懂只能看懂typedef    enum,这个代码安全性很高啊,大佬们都睡了,要想解决等明天吧,洗刷刷也没的用滴哦

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


把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-21 00:06
快速回复:开放定址散列 VS实现时出现的警告
数据加载中...
 
   



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

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