Почему я получаю SIGSEGV с glib? - PullRequest
       23

Почему я получаю SIGSEGV с glib?

1 голос
/ 26 сентября 2011

Когда я запускаю следующую функцию, я получаю 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 Ответ

2 голосов
/ 26 сентября 2011

Может быть, избавиться от второго filename = g_dir_read_name(dp); (первая строка внутри цикла)

Когда он выполняет условие проверки цикла, он уже присваивает filename следующей записи в директории. Если вы снова запустите эту строку из цикла, она попытается прочитать еще одну запись после последней. Если в каталоге имеется нечетное количество файлов, filename может указывать на нулевое значение при последнем выполнении цикла.

...