免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 11590 | 回复: 14

[C++] 运行C++程序报错:Segmentation fault(coredump) 请问为什么? [复制链接]

论坛徽章:
0
发表于 2009-12-04 11:35 |显示全部楼层
5可用积分
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 编辑 ]

最佳答案

查看完整内容

楼主,试试在: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 编辑 ]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 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 编辑 ]

论坛徽章:
0
发表于 2009-12-04 12:15 |显示全部楼层
看不出来

seekg是什么东西

论坛徽章:
0
发表于 2009-12-04 12:21 |显示全部楼层

回复 #2 雨过白鹭洲 的帖子

我想只打开一次文件,每次执行getline前使用seekg回到文件开头。

论坛徽章:
0
发表于 2009-12-04 12:54 |显示全部楼层
一步一步的debug

论坛徽章:
0
发表于 2009-12-04 12:58 |显示全部楼层
我刚改了一个Segmentation fault,有core就gdb吧。估计是数组指针混用了。

论坛徽章:
0
发表于 2009-12-04 13:02 |显示全部楼层

大虾,getline是从输入读取一行到缓冲区,好不好。
if(!find("s",f))  你传给find发的是一个字符串"s",而不是缓冲区。
就是getline()函数用错了。
不懂c++,不过还是找出了问题,请楼主给分。

[ 本帖最后由 peidright 于 2009-12-4 13:11 编辑 ]

论坛徽章:
0
发表于 2009-12-04 13:17 |显示全部楼层

回复 #2 雨过白鹭洲 的帖子

dsfsdf

论坛徽章:
0
发表于 2009-12-04 13:18 |显示全部楼层

回复 #1 richardzhang 的帖子

sdfsdfsdf

论坛徽章:
0
发表于 2009-12-04 16:43 |显示全部楼层
,学习了,真复杂呀。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP