为什么我用glib获得SIGSEGV?

时间:2011-09-26 19:12:24

标签: c glib

当我运行以下函数时,我得到一个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;
}

1 个答案:

答案 0 :(得分:2)

也许摆脱第二个filename = g_dir_read_name(dp);(循环内部的第一行)

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