首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >警告C6386 -在写入“LINES_DATA.Lines”时缓冲区溢出

警告C6386 -在写入“LINES_DATA.Lines”时缓冲区溢出
EN

Stack Overflow用户
提问于 2021-07-07 03:30:36
回答 2查看 101关注 0票数 0

我知道以前有人问过这个问题,但我无法完全修正我的代码,甚至阅读其他主题。有人知道它为什么要发出这个警告吗?

写入“_Warning _DATA.line”时,C6386缓冲区溢出:可写大小为“LINES_DATA.NumLines_4”字节,但“8”字节可能被写入。

代码语言:javascript
运行
复制
    LINES_DATA.NumLines = line_i; //line_i = 100
    LINES_DATA.Lines = new int* [LINES_DATA.NumLines]; 

    line_i = 0;

    for (rapidxml::xml_node<>* pNode = pRoot->first_node(); pNode; pNode = pNode->next_sibling())
    {
        LINES_DATA.Lines[line_i] = new int[COLUMNSIZE]; //COLUMNSIZE = 5

        for (int pos_i = 0; pos_i < COLUMNSIZE; pos_i++)
        {
            LINES_DATA.Lines[line_i][pos_i] = pNode->value()[pos_i] - '0';
        }
        line_i++;
    }

我收到这行的警告:

LINES_DATA.Lines[line_i] = new int[COLUMNSIZE];

非常感谢

EN

回答 2

Stack Overflow用户

发布于 2021-07-07 03:34:27

如果数组(LINES_DATA.Lines)具有line_i元素,则LINES_DATA.Lines[line_i]无效。

数组是基于零的,因此LINES_DATA.Lines的元素0到line_i-1

票数 1
EN

Stack Overflow用户

发布于 2021-07-07 09:04:51

这只是一个代码分析警告。编译器不够聪明,无法计算出程序的整个运行时行为。

您的代码确实存在缓冲区溢出的主要风险,特别是如果XML包含100多个元素。您应该在这里使用智能指针和/或STL容器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68279649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档