在c ++

时间:2017-08-13 02:02:24

标签: c++ string invalid-pointer

我有两个c ++类,让我们调用一个hier,另一个调用cp。在启动期间,hier会创建cp的实例。 cp读入一个包含两列的文本文件,称为resp_rresp_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期间。

1 个答案:

答案 0 :(得分:0)

好的,好的,Sam Varshavchik是对的,这个bug在一个完全不相关的地方,访问另一个函数(在cp内部)超出其分配大小的数组。令人震惊!

我发现了valgrind的错误,这给了我一个无效的读取大小错误。

哇。自从我编写c ++代码以来已经太久了。是时候结束这个项目并发送它了!

谢谢大家。