遇到一个奇怪的问题,请各位帮忙看一下:
环境:
linux系统,分别在debian6(64位,内核2.6.32)和ubuntu11(32位,内核版本2.6.35)下进行过测试,编译器都为g++ 4.5,出现同样的错误
出错信息:两台机器出错时都是遍历到第1018个文件夹,opendir返回NULL,无其他出错信息。
已做过的尝试:
(1)不可能是内存溢出,
(2)路径正常,都拥有可读权限,参数传入正常,并且删除第1018个文件夹后,遍历到下一个文件夹同样出错,只读取第1018个文件夹也是读取到1018次时出错。
部分代码段如下:
[code="c++"]
int k=0;
for (it=mylist->begin(); it!=mylist->end(); ++it)
{
string l=*it;
char *p;
char * setName=new char[300];
p=&l[0];
sprintf(setName,"%s",p);
cout<<"setName:"<
if(k==1017){
cout
}
setFaceStruct->setName[k]=setName;
char * fileThumb=new char[300];
sprintf(fileThumb,"%s/%s/1.jpg",facesDirectory,p);
setFaceStruct->setFilePathThumbnails[k]=fileThumb;
char imagesDir[300];
sprintf(imagesDir,"%s/%s",facesDirectory,p);
int imageK=0;
struct dirent *de=NULL;
DIR *d=NULL;
list * mylistImages=new list;
list::iterator itImages;
if((d=opendir(imagesDir))==NULL)//循环到k=1017出现为NULL的情况
cout<<"d is NULL"<<endl;
while (de = readdir(d))
{
cout<<de->d_name<<endl;
if (!((strcmp(de->d_name, ".")==0) || (strcmp(de->d_name, "..")==0)))
{
imageK++;
char fullPath[300];
sprintf(fullPath,"%s/%s",imagesDir,de->d_name);
mylistImages->push_back (fullPath);
cout<<"fullPath:"<<fullPath<<" imageK:"<<imageK<<endl;
}
}
mylistImages->sort();
setFaceStruct->faceImages[k].faces= new IplImage* [imageK];
setFaceStruct->faceImages[k].count=imageK;
int imageIndex=0;
for (itImages=mylistImages->begin(); itImages!=mylistImages->end(); ++itImages)
{
string l=*itImages;
char *p;
char * fileName=new char[300];
p=&l[0];
sprintf(fileName,"%s",p);
setFaceStruct->faceImages[k].faces[imageIndex]=cvLoadImage(fileName,1);
imageIndex++;
}
k++;
cout<<"k="<<k<<endl;
}
[/code]