我有两个c ++类,让我们调用一个hier
,另一个调用cp
。在启动期间,hier
会创建cp
的实例。 cp
读入一个包含两列的文本文件,称为resp_r
和resp_l
,并将内容存储在两个同名的数组中。例如:std::vector<int> resp_r;
对于好奇的读者,这些列表示在1秒钟的窗口内是否发生了左键或右键。
在每个单元格中,resp_r/l
或者具有1或0,具体取决于文本文件。
hier
知道文本文件中的行数(t),并且for
循环超过t
。在每个循环中,它通过调用cp
的公共方法resp_r/l[t]
“询问”cp
string get_response(int t)
中的内容:
string resp;
while (t < max_t) {
resp = cp->get_response(t);
...
}
在cp
中,get_response
函数定义如下:
string CP::get_response(int t) {
if (resp_r[t] == 1) {
return "right";
} else if (resp_l[t] == 1) {
return "left";
}
return "none";
}
我有大约50个文件可以正常工作,但在其中一个文件中,当脚本接近文件末尾时它不会。
*`./cp_diff_vr_x.out'出错:free():无效指针:0x0000000000f3e920 *
我试图弄清楚这里有什么问题。错误似乎发生在return语句中(返回“right”,具体而言),而不是在查询resp_r
期间。
答案 0 :(得分:0)
好的,好的,Sam Varshavchik是对的,这个bug在一个完全不相关的地方,访问另一个函数(在cp内部)超出其分配大小的数组。令人震惊!
我发现了valgrind的错误,这给了我一个无效的读取大小错误。
哇。自从我编写c ++代码以来已经太久了。是时候结束这个项目并发送它了!
谢谢大家。