iteye_7685 2012-04-05 17:19
浏览 488
已采纳

c++ opendir循环到一定次数返回NULL

遇到一个奇怪的问题,请各位帮忙看一下:

环境:
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]

  • 写回答

1条回答 默认 最新

  • xiangjie256 2012-04-06 10:03
    关注

    你这个应该是文件打开数的问题,试试下面的代码
    [url]http://xiangjie88.iteye.com/blog/1408024[/url]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容