千万不要轻易相信外部数据:)
今天遇到一个问题,在写一个文件的时候,不时的遇到 段错误 这个问题,自己第一反应时使用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进行检查。