当我运行以下函数时,我得到一个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;
}
答案 0 :(得分:2)
也许摆脱第二个filename = g_dir_read_name(dp);
(循环内部的第一行)
当它执行循环测试条件时,它已经将filename
分配给dir中的下一个条目。如果从循环内再次运行该行,它将尝试在最后一个之后再读取一个条目。如果目录中有奇数个文件,filename
可能在上次执行循环时指向空值。