目前而言,遇到此问题的原因,基本是越界访问数组或者指针。比如我之前的代码:
int i = 0;
if (!tfile_open || !keywords || !pKeyValue)
{
return -1;
}
do
{
tfile_open.Read(keywords + i, 1);
} while (*(keywords + i) != 0x20 && *(keywords +i++) != m_textData.chDelimiter);
*(keywords + i - 1) = 0;
//已经没有数据可以读
if (*(keywords + i) == 0x20)
{
return -1;
}
i = 0;
do
{
tfile_open.Read(pKeyValue + i, 1);
} while (*(pKeyValue + i++) != m_textData.chDelimiter);
*(pKeyValue + i - 1) = 0;
keywords 和 pKeyValue 数组的地址,分配在栈里,传递到这个函数。
问题就出在:
*(keywords + i - 1) = 0;有可能i值没有增加,就会越界访问。从而出现这个问题。
修改为:if (i > 0)
{
*(keywords + i - 1) = 0;
}
就能避免此问题。