C 为什么我会得到一个能说会道的SIGSEGV?
当我运行下面的函数时,我得到一个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
#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()中运行它,看看它说了什么。谢谢!这就解决了!我在重新构造函数时忘记删除该语句。