Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我会得到一个能说会道的SIGSEGV?_C_Glib - Fatal编程技术网

C 为什么我会得到一个能说会道的SIGSEGV?

C 为什么我会得到一个能说会道的SIGSEGV?,c,glib,C,Glib,当我运行下面的函数时,我得到一个SIGSEGV。我不明白为什么。。。 有人能帮忙吗?给我指出正确的方向?我是一个更大程序的一部分,该程序扫描目录层次结构以查找重复文件 #include <stdio.h> #include <stdlib.h> #include <glib.h> int main ( int argc , char *argv[]) { GError *error = NULL; const gchar* filename

当我运行下面的函数时,我得到一个SIGSEGV。我不明白为什么。。。 有人能帮忙吗?给我指出正确的方向?我是一个更大程序的一部分,该程序扫描目录层次结构以查找重复文件

#include <stdio.h>
#include <stdlib.h>
#include <glib.h>

int main ( int argc , char *argv[]) {
    GError *error = NULL;
    const gchar* filename = NULL;
    gchar *directory_path = "/tmp";
    GDir* dp = g_dir_open (directory_path, 0, &error);
    if (error) {
        g_warning("g_dir_open() failed: %s\n", error->message);
        g_clear_error(&error);
        return 1;
        }
    while ( (filename = g_dir_read_name(dp)) ){
        filename = g_dir_read_name(dp);
        gchar* path = g_build_filename (directory_path, filename, NULL);
        printf("%s\n", filename);
        g_free (path);
    }
    return 0;
}
#包括
#包括
#包括
int main(int argc,char*argv[]){
GError*error=NULL;
常量gchar*filename=NULL;
gchar*目录路径=“/tmp”;
GDir*dp=g_dir_open(目录路径,0,&错误);
如果(错误){
g_警告(“g_dir_open()失败:%s\n”,错误->消息);
g_清除_错误(&错误);
返回1;
}
而((文件名=g_dir_read_name(dp))){
filename=g_dir_read_name(dp);
gchar*path=g_build_filename(目录路径,文件名,NULL);
printf(“%s\n”,文件名);
g_free(路径);
}
返回0;
}

也许可以去掉第二个
文件名=g\u dir\u read\u name(dp)(循环内的第一行)


当它执行循环测试条件时,它已经将
filename
分配给目录中的下一个条目。如果从循环中再次运行该行,它将尝试在最后一个条目之后再读取一个条目。如果目录中有奇数个文件,
filename
可能在最后一次执行循环时指向空值。

我不熟悉glib,但
gchar*directory_path=“/tmp”
。让它成为常量。试着在valgrind()中运行它,看看它说了什么。谢谢!这就解决了!我在重新构造函数时忘记删除该语句。