作者fishlinghu (令狐瑜)
看板C_and_CPP
标题[问题] vector.clear() seg fault
时间Thu Nov 3 05:18:09 2016
开发平台(Platform): (Ex: Win10, Linux, ...)
Linux
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
g++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
我最近发现某些情况下用vector.clear()会seg fault
例如下面的code
我在for loop外面declare我的2D vector
还有我要当成row的1D vector
里面存int
每个interation我要重新建立这个DS还有里面的资料
所以用vector.clear();
不过我发现这行好像会导致seg fault
後来我把1D vector的declaration移到for loop里面
一切就正常了
觉得很疑惑
想请问有没有人知道可能的原因
为何不能这样子用clear()?
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版)
vector< vector<int> > temp_vec;
vector<int> temp_vec_row(length, 0);
for()
{
temp_vec.clear();
//vector<int> temp_vector_row(length, 0);
for()
temp_vec.push_back(temp_vec_row);
// Do something to fill the 2D vector
}
补充说明(Supplement):
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 128.61.13.105
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1478121493.A.85C.html
※ 编辑: fishlinghu (128.61.13.105), 11/03/2016 05:47:45
1F:→ CoNsTaR: 觉得问题不在这边 11/03 08:05
2F:→ wawi2: 1. 问题应该在其他地方 2. 你其实是清掉2D vector 11/03 09:44
3F:→ tinlans: 用 -g3 之类的编译你的程式,再用 valgrind 跑一遍看看。 11/03 10:38
4F:→ tinlans: 然後,把 -fsanitize=address 喂给 GCC 再跑一遍。 11/03 10:39
5F:→ fishlinghu: 恩恩 我在检查看看 不过我整个程式几乎没用到ptr操作 11/03 11:24
6F:→ fishlinghu: 所以理论上这样用是可以的罗? 11/03 11:24
7F:推 steve1012: 可能贴整段代码比较清楚 11/03 11:53
8F:推 LPH66: 应该不是往指标操作去找, 而是要往阵列存取超界去找 11/03 13:52
9F:→ LPH66: vector<> 会出这种事多半是"阵列"存取超界 11/03 13:52
10F:→ LPH66: 使得一些 vector<> 里的资料被破坏, clear() 时才会炸 11/03 13:53
11F:推 Raymond0710: vector存的是int?还是物件?很可能是你的物件问题 11/03 20:25
12F:→ fishlinghu: 回楼上 都是int 所以我想或许就是有出界问题 11/04 04:30