警告 C6386 - 写入"LINES_DATA"时缓冲区溢出。线'



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

警告C6386写入"LINES_DATA.LINES"时缓冲区溢出:可写大小为"LINES_DATA.NumberLines">4个字节,但可能写入"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容器。

最新更新