gpt4 book ai didi

c++ - 缓冲区溢出 - 似乎无法定位问题

转载 作者:太空宇宙 更新时间:2023-11-04 12:52:09 25 4
gpt4 key购买 nike

我试图在这个产生“缓冲区溢出警告”的简单示例代码中找出问题所在,在查看它一段时间后我决定发布它,希望有人能看到我的代码中的错误?

消息:警告 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 的内存的位置,我的意思是缓冲区是根据与字符串长度和步长相同的值精确分配的。

最佳答案

感谢上面评论过的 aschepler,解决这个问题的方法是将 .length() 返回的值复制到一个 const unsigned int 中,然后在两个地方都使用它,如下所示:

const unsigned int lineLength = line.length();

分配:

float* tmpArray = new float[lineLength * STEP];

For循环:

for (unsigned int i = 0; i < lineLength; i++)

关于c++ - 缓冲区溢出 - 似乎无法定位问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48554335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com