[问题] vector.clear() seg fault

楼主: fishlinghu (令狐瑜)   2016-11-03 05:18:09
开发平台(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):
作者: CoNsTaR ((const *))   2016-11-03 08:05:00
觉得问题不在这边
作者: wawi2 (@@)   2016-11-03 09:44:00
1. 问题应该在其他地方 2. 你其实是清掉2D vector
作者: tinlans ( )   2016-11-03 10:38:00
用 -g3 之类的编译你的程式,再用 valgrind 跑一遍看看。然后,把 -fsanitize=address 喂给 GCC 再跑一遍。
楼主: fishlinghu (令狐瑜)   2016-11-03 11:24:00
恩恩 我在检查看看 不过我整个程式几乎没用到ptr操作所以理论上这样用是可以的囉?
作者: steve1012 (steve)   2016-11-03 11:53:00
可能贴整段代码比较清楚
作者: LPH66 (-6.2598534e+18f)   2016-11-03 13:52:00
应该不是往指标操作去找, 而是要往阵列存取超界去找vector<> 会出这种事多半是"阵列"存取超界使得一些 vector<> 里的资料被破坏, clear() 时才会炸
作者: Raymond0710 (雷门)   2016-11-03 20:25:00
vector存的是int?还是物件?很可能是你的物件问题
楼主: fishlinghu (令狐瑜)   2016-11-04 04:30:00
回楼上 都是int 所以我想或许就是有出界问题

Links booklink

Contact Us: admin [ a t ] ucptt.com