我正在编写一个带有 2 个命令行参数的程序:a
和b
分别。
只要一切都好a <= 17.5
一旦a > 17.5
程序抛出以下错误:
已释放对象的校验和不正确 - 对象可能在被释放后被修改
我已将问题缩小到以下代码:
for(int a=0; a < viBrickWall.size(); a++) {
vector<int64_t> viTmp(iK-i);
fill(viTmp.begin(),viTmp.end(),2);
for(int b = 0; b < viBrickWall[a].size(); b++) {
viTmp[viBrickWall[a][b]] = 3;
}
viResult.push_back(viTmp);
viTmp.clear();
}
删除后一段代码,消除了错误。
我也在使用 valgrind 来调试内存,但我还没有找到任何解决方案。
这是 valgrind 报告的副本:
编辑
我用调试标志编译了程序:
g++ -g -O0 -fno-inline program.cpp
并使用 valgrind 运行它,如下所示:
` valgrind --leak-check=full --show-reachable=yes --dsymutil=yes ./a.out 48 10 `
我注意到以下行:
==15318== Invalid write of size 8
==15318== at 0x100001719: iTileBricks(int) (test.cpp:74)
==15318== by 0x100001D7D: main (test.cpp:40)
第 74 行是:
viTmp[viBrickWall[a][b]] = 3;
第 40 行是:
viBrickWall = iTileBricks(iPanelWidth);