Chinaunix
标题:
运行C++程序报错:Segmentation fault(coredump) 请问为什么?
[打印本页]
作者:
richardzhang
时间:
2009-12-04 11:35
标题:
运行C++程序报错:Segmentation fault(coredump) 请问为什么?
bool find(string s,ifstream &f)
{
string str;
f.seekg(0,std::ios_base::beg);
while(getline(f,str))
{
cout << str << endl;
}
return false;
}
int main(int argc, char* argv[])
{
ifstream f("a.txt");
for(int i = 0;i < 100;++i){
cout << i << endl;
if(!find("s",f))
{
}
}
f.close();
return 0;
}
在linux下报错:Segmentation fault(coredump)
在.net下执行不报错,但实际上 f.seekg(0,std::ios_base::beg); 没起作用,不知道为什么?
[
本帖最后由 richardzhang 于 2009-12-4 13:19 编辑
]
作者:
OwnWaterloo
时间:
2009-12-04 11:35
楼主,试试在:
f.seekg(0,std::ios_base::beg);
后面,加上:
f.clear();
-------- -------- -------- -------- -------- -------- -------- --------
更新一下,上面说错了。
应该在seekg之前,调用clear。
如果流fail, seekg不会修改get position。
所以需要在seekg之前,而不是之后,调用clear,清除failbit和badbit,才能使seekg工作。
[
本帖最后由 OwnWaterloo 于 2009-12-4 20:31 编辑
]
作者:
雨过白鹭洲
时间:
2009-12-04 12:15
看不出来
seekg是什么东西
作者:
richardzhang
时间:
2009-12-04 12:21
标题:
回复 #2 雨过白鹭洲 的帖子
我想只打开一次文件,每次执行getline前使用seekg回到文件开头。
作者:
ffangjian
时间:
2009-12-04 12:54
一步一步的debug
作者:
prolj
时间:
2009-12-04 12:58
我刚改了一个Segmentation fault,有core就gdb吧。估计是数组指针混用了。
作者:
peidright
时间:
2009-12-04 13:02
大虾,getline是从输入读取一行到缓冲区,好不好。
if(!find("s",f)) 你传给find发的是一个字符串"s",而不是缓冲区。
就是getline()函数用错了。
不懂c++,不过还是找出了问题,请楼主给分。
[
本帖最后由 peidright 于 2009-12-4 13:11 编辑
]
作者:
sljzj
时间:
2009-12-04 13:17
标题:
回复 #2 雨过白鹭洲 的帖子
dsfsdf
作者:
sljzj
时间:
2009-12-04 13:18
标题:
回复 #1 richardzhang 的帖子
sdfsdfsdf
作者:
peidright
时间:
2009-12-04 16:43
,学习了,真复杂呀。。
作者:
OwnWaterloo
时间:
2009-12-04 16:58
标题:
回复 #11 peidright 的帖子
是很复杂…… 不学也罢
直接学lua或者python吧。 据说有这么一个说法:C+python搞定99%的事情
作者:
richardzhang
时间:
2009-12-04 16:58
标题:
回复 #2 OwnWaterloo 的帖子
应该是f.seekg(0,std::ios_base::beg);
前面,加上:
f.clear();
原因是getline()执行到文件末尾后会改状态为eof,导致seekg运行不正常,加上clear()就可以了
作者:
peidright
时间:
2009-12-04 17:05
标题:
回复 #12 OwnWaterloo 的帖子
,那剩余1%的事情? 交给汇编 + lisp?
作者:
OwnWaterloo
时间:
2009-12-04 20:18
标题:
回复 #13 richardzhang 的帖子
对,是我的错误。应该放在前面。
我去更新那贴。
作者:
OwnWaterloo
时间:
2009-12-04 20:19
标题:
回复 #14 peidright 的帖子
不,交给别人去做
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2