程序在处理矢量时会接收`sigtrap'
Program receives `SIGTRAP` when deallocating vector
我有此代码,该代码应该在 std::vector<std::vector<int>>
中的所有向量中查找元素:
for(int x = 0;x < list.size();x++){
for(int y = 0;y < list[x].size();y++){
std::vector<std::vector<int>::iterator> ptr;
for(int z = 1;z < list.size();z++){
std::vector<int>::iterator iter = std::find(list[z].begin(),
list[z].end(), list[x][y]);
if(iter != list[z].end()){
ptr.push_back(iter);
}else
goto fail;
}
list[0].erase(list[0].begin() + y);
for(int z = 1;z <= ptr.size();z++){
list[z].erase(ptr[z - 1]);
}
fail: continue;
}
}
该程序总是产生错误的输出,并随机崩溃。调试表明,在ntdll
中解构list
时,它会接收SIGTRAP
。这是随机发生的,但是该程序永远无法正常工作。我在代码中没有任何断点。
这些是我在问此问题后的某个时间中在代码中发现的错误:
- 确定哪个迭代器的代码仅为
list[0]
设计,而不是为list[x]
设计,而导致erase()
被属于另一个向量的迭代器,从而导致内存损坏。 -
x
在某些地方被0
替换(忘了更改(。 -
list
在程序中被其他代码损坏(现在已修复(。
这些是修复:
- 使用迭代器到
std::vector<std::vector<int>::iterator>
和if(z==x)continue;else{list[z].erase(*iter); iter++;}
确保iter
始终指向正确的元素。 - 用
x
替换0
。 - 在程序的其他地方解决了问题。
该程序现在正常工作,感谢您尝试帮助我。
相关文章:
- 警告处理为错误这里有什么问题
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用流处理接收到的数据
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 基于多个条件处理地图中的所有元素
- 如何找出GDB的SIGTRAP核心转储的根本原因
- 如何用数字处理log(0)
- SSL上的`curl_easy_send`和`curl_asy_recv`:如何处理`CURLE_AGAIN`
- 错误处理.将系统错误代码映射到泛型
- 从文本文件中读取时钟时间和事件时间并进行处理
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 用于矢量处理的多个线程
- 对字符串进行排序时,在c++中处理sort()
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- 处理除以零会导致<csignal>意外行为
- 程序在处理矢量时会接收`sigtrap'