C++ 注意检查迭代器是否有效

千万不要轻易相信外部数据:)

今天遇到一个问题,在写一个文件的时候,不时的遇到 段错误 这个问题,自己第一反应时使用fprintf写文件,文件大小有限制,但是没有找到相关的说法。

还是仔细检查了自己的代码,发现没有对之前的一个迭代器进行有效性判断就使用了,据此打印了一下log信息,发现果真是这地方出了问题。

以后写代码,不要想当然的认为迭代器管用,一定要做检查,记住了。

FILE *fpres = fopen("topsiteurl.txt","w"); assert(fpres); vector<string>::iterator itvec; map<string,int>::iterator itmap; map<string, set<string> >::iterator itmap2; for(itvec = g_sortsite.begin(); itvec != g_sortsite.end(); itvec++){ itmap = g_topksite.find(itvec->c_str()); fprintf(fpres,"info:%s %d/n",itmap->first.c_str(),itmap->second); fprintf(fpres,"########################################url begin########################################/n"); itmap2 = g_topsiteurl.find(itmap->first.c_str()); if(itmap2 == g_topsiteurl.end()) cout<<"空指针了 必须段错误"<<endl; set<string>::iterator itset = itmap2->second.begin(); for(; itset != itmap2->second.end(); itset++){ fprintf(fpres,"/t%s/n",itset->c_str()); fprintf(fpres,"/n"); } fprintf(fpres,"########################################url end########################################/n"); } fclose(fpres);

之前没有对itmap进行检查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值