我试图在这个产生“缓冲区溢出警告”的简单示例代码中找到问题,在查看了一段时间后,我决定发布这个问题,希望有人可能会在我的代码中看到错误?
消息:警告 C6386写入 'tmpArray' 时缓冲区溢出:可写大小为 'line.public: unsigned int __thiscall std::basic_string,class std::allocator >::length(void) const ()*12*4'字节,但可能会写入“52”字节。
产生警告的示例:
#define STEP 12
void main()
{
std::string line("Hello!");
float* tmpArray = new float[line.length() * STEP];
unsigned int v = 0;
for (unsigned int i = 0; i < line.length(); i++)
{
tmpArray[ v ] = 0.0f;
tmpArray[v + 1] = 0.0f;
tmpArray[v + 2] = 0.0f;
tmpArray[v + 3] = 0.0f;
tmpArray[v + 4] = 0.0f;
tmpArray[v + 5] = 0.0f;
tmpArray[v + 6] = 0.0f;
tmpArray[v + 7] = 0.0f;
tmpArray[v + 8] = 0.0f;
tmpArray[v + 9] = 0.0f;
tmpArray[v + 10] = 0.0f;
tmpArray[v + 11] = 0.0f;
v += STEP;
}
delete[] tmpArray;
}
我看不到我要进入不属于 tmpArray 的内存的位置,我的意思是缓冲区是根据与字符串长度和步长相同的值精确分配的。