-3

我有两个 c++ 类,让我们调用一个hier和另一个cp。在启动期间,hier创建cp. cp读入一个包含两列的文本文件,称为resp_rand resp_l,并将内容存储在两个同名数组中。例如:std::vector<int> resp_r;

对于好奇的读者,这些列表示在 1 秒窗口内是否发生了向左或向右按​​键。

在每个单元格中,resp_r/l然后有一个 1 或 0,具体取决于文本文件。

hier知道文本文件中的行数 (t),并fort. 在每个循环中,它通过调用 : 的公共方法来“询问”cp内容是什么:resp_r/l[t]cpstring get_response(int t)

string resp;
while (t < max_t) {
 resp = cp->get_response(t);
 ...
}

在 中cpget_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”),而不是在 querying 期间resp_r

4

1 回答 1

0

好的,好的,Sam Varshavchik 是对的,错误位于完全不相关的位置,在另一个函数(cp 内部)中访问超出其分配大小的数组。震惊!

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

哇。很久没写c++代码了。是时候结束这个项目并将其发送出去了!

谢谢大家。

于 2017-08-13T03:15:21.100 回答