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

问题描述

我知道之前有人问过这个问题,但我无法完全修复我的代码,甚至阅读其他主题。 有谁知道为什么会抛出这个警告?

警告 C6386 写入“LInes_DATA.Lines”时缓冲区溢出:可写大小为“LInes_DATA.NumLines4”字节,但可能会写入“8”字节。*
"

    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];

非常感谢

解决方法

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

数组是从零开始的,所以 LINES_DATA.Lines 有元素 0 到 line_i-1

,

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

您的代码确实存在缓冲区溢出的重大风险,尤其是当 XML 包含 100 多个元素时。您应该在这里使用智能指针和/或 STL 容器。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...