【发布时间】:2017-08-13 02:02:23
【问题描述】:
我有两个 c++ 类,让我们调用一个 hier 和另一个 cp。在启动过程中,hier 创建了一个cp 的实例。 cp 读入一个包含两列的文本文件,分别称为resp_r 和resp_l,并将内容存储在两个同名数组中。例如:std::vector<int> resp_r;
对于好奇的读者,这些列表示在 1 秒窗口内是否发生了向左或向右按键。
在每个单元格中,resp_r/l 然后有一个 1 或 0,具体取决于文本文件。
hier 知道文本文件中的行数 (t),并且在 t 上有一个 for 循环。在每个循环中,它“询问”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 *
我试图找出这里出了什么问题。该错误似乎发生在返回语句期间(具体来说,返回“right”),而不是在查询resp_r 期间。
【问题讨论】:
-
您的代码中某处存在错误。 stackoverflow.com 上只有一个人可以找到并修复此错误。那当然是你,因为只有你拥有完整的源代码,并且只有你能够运行调试器来追踪错误。
-
任何机会 t 可能是无效的?检查 t 的值与 resp_r 的界限是一个好习惯
-
谢谢。事实上,我对 c++ 非常陌生,以至于我不确定这段代码本身是否存在问题。知道它在其他地方已经很有帮助。
-
更容易帮助您的是代码将有必要的代码来理解问题(特别是如何声明和填充变量)。您是否确认您的向量已正确填充,并且在您尝试检索值时索引有效。
标签: c++ string invalid-pointer