缘丿谁懂我一生 发表于 2020-4-9 19:54:55

C++:缓冲区溢出怎么解决

本帖最后由 缘丿谁懂我一生 于 2020-4-9 21:09 编辑

警告        C6386        写入到“newSpace”时缓冲区溢出: 可写大小为“newSize*4”个字节,但可能写入了“8”个字节。


               
                Worker** newSpace = new Worker * ;
               
                Worker* worker = NULL;
                       
                newSpace = worker;
                }
类声明:
class WorkerManger
{
public:

        //职工人数
        int m_Number = 0;
        //职工数组指针
        Worker** m_EmpArray= NULL;

private:

};

//职工抽象类
class Worker
{
public:
        //显示个人信息
        virtual void showInfo() = 0;
        //获取岗位名称
        virtual string getDeptName() = 0;
        //职工编号
        int m_Id=0;
        //职工姓名
        string m_Name;
        //部门编号
        int m_DeptId=0;

};

人造人 发表于 2020-4-9 20:15:13

只有这一点代码,你要别人去猜剩下的那一部分代码吗?

把代码贴完整

缘丿谁懂我一生 发表于 2020-4-9 20:25:08

人造人 发表于 2020-4-9 20:15
只有这一点代码,你要别人去猜剩下的那一部分代码吗?

把代码贴完整

这不只是局部错误吗

缘丿谁懂我一生 发表于 2020-4-9 20:28:10

这是目前的全部了

人造人 发表于 2020-4-9 20:47:42

缘丿谁懂我一生 发表于 2020-4-9 20:25
这不只是局部错误吗

错误确实是局部的,但是定位错误需要从全局着手
举个例子
Worker** newSpace = new Worker * ;

看到这一行,我需要知道 Worker 的类型,你给出的这个代码中我找不到 Worker 的定义,不知道 Worker 的类型

人造人 发表于 2020-4-9 21:30:32

本帖最后由 人造人 于 2020-4-9 21:49 编辑

没有找到你说的问题,但是找到了一堆其他问题(内存泄漏问题)
没有帮你找全,剩下的你自己找



人造人 发表于 2020-4-9 21:43:33

犯了一个低级错误,抱歉
另外,没有找到你说的那个问题

人造人 发表于 2020-4-9 21:46:37

一个new对应一个delete,记住了吗?
代码成对编写,好吗?

缘丿谁懂我一生 发表于 2020-4-9 22:08:41

人造人 发表于 2020-4-9 21:46
一个new对应一个delete,记住了吗?
代码成对编写,好吗?

我的vs2019有这个警告

缘丿谁懂我一生 发表于 2020-4-9 22:09:43

人造人 发表于 2020-4-9 22:57:08

缘丿谁懂我一生 发表于 2020-4-9 22:09


你能想办法让这个 “可能” 成真吗?
我想看看写入8个字节的情况
我怎么看代码都想不到如何写入这8个字节
我不知道导致这个问题的原因,也就没办法解决这个问题
除非你让这个问题出现,不能重现的问题很难解决
而这个问题干脆就没有发生过,我没办法

还有,你还是喜欢发局部的代码,这次是局部的图片
知道吗,看这个图片的时候,我还是不得不打开之前下载你的代码,因为图片上面的代码不全,我没办法判断问题

wwhelloworld 发表于 2021-9-24 21:45:17

请问这个问题解决了吗,我也遇到了同样的问题

wwhelloworld 发表于 2021-9-24 21:49:33

人造人 发表于 2020-4-9 22:57
你能想办法让这个 “可能” 成真吗?
我想看看写入8个字节的情况
我怎么看代码都想不到如何写入这8个字 ...

名字比如张三有四个字节,那加上两个编号必然超过四个字节
页: [1]
查看完整版本: C++:缓冲区溢出怎么解决