C++11 d_名称与生成核心转储的cstring进行比较 < >我在C++中使用dio.h,以便获得目录中可用的目录和文件,除了可用目录和文件a“…”和“…”之外,还列出了它的问题。 为了删除它们,我在打印之前添加了一个if语句。 代码如下: if ((dir = opendir (".")) != NULL) { while ((ent = readdir (dir)) != NULL) { if( !strcmp( ent->d_name, "." )){ printf ("%s\n", ent->d_name); } closedir (dir); } } else { //could not open directory printf("Error opening directory"); }

C++11 d_名称与生成核心转储的cstring进行比较 < >我在C++中使用dio.h,以便获得目录中可用的目录和文件,除了可用目录和文件a“…”和“…”之外,还列出了它的问题。 为了删除它们,我在打印之前添加了一个if语句。 代码如下: if ((dir = opendir (".")) != NULL) { while ((ent = readdir (dir)) != NULL) { if( !strcmp( ent->d_name, "." )){ printf ("%s\n", ent->d_name); } closedir (dir); } } else { //could not open directory printf("Error opening directory"); },c++11,coredump,dirent.h,C++11,Coredump,Dirent.h,它并没有给我一个编译错误,但是当执行它时,它给了我一个编译错误 “双重自由或损坏(顶部):0x00000000016d3010*** 中止(核心转储)” 我如何修复它?代码!strcmp比较是一个bug,但与崩溃无关。那是 由于关闭目录,然后尝试继续从中读取条目而导致 在下面的程序中,您的错误将被注释掉并更正 #include <dirent.h> #include <stdio.h> #include <string.h> int main(int arg

它并没有给我一个编译错误,但是当执行它时,它给了我一个编译错误 “双重自由或损坏(顶部):0x00000000016d3010*** 中止(核心转储)”
我如何修复它?

代码!strcmp比较是一个bug,但与崩溃无关。那是 由于关闭目录,然后尝试继续从中读取条目而导致

在下面的程序中,您的错误将被注释掉并更正

#include <dirent.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
    DIR * dir = NULL;
    if ((dir = opendir (".")) != NULL) {

        struct dirent * ent = NULL;
        while ((ent = readdir (dir)) != NULL) 
        {

            // if( !strcmp( ent->d_name, "." )){ <-- Bug you have yet to find.
            if( strcmp( ent->d_name, "." )){
                printf ("%s\n", ent->d_name);
            }

            // closedir (dir); <-- The cause of your crash

        }
        closedir (dir);
    }
    else {
      //could not open directory 
      printf("Error opening directory");
    }
    return 0;
}
#包括
#包括
#包括
int main(int argc,字符**argv)
{
DIR*DIR=NULL;
如果((dir=opendir(“.”)!=NULL){
struct dirent*ent=NULL;
while((ent=readdir(dir))!=NULL)
{
//如果(!strcmp(ent->d_name,“.”){d_name,“.”){
printf(“%s\n”,ent->d_name);
}
//closedir(dir);