在 qsort() 中使用比较函数时出现分段错误 11
Segmentation Fault 11 when using a compare function in qsort()
我有一个 struct dir_item
的数组,我想使用 qsort
对它进行排序。
使用下面的代码我得到一个 Segmentation Fault 11
.
我想知道:
- 如何解决这个问题?
- 为什么我首先遇到这个问题
struct dir_item
{
char name[NAME_MAX];
int is_dir;
};
struct app_state
{
char cwd[PATH_MAX];
struct dir_item *dir_entries;
int dir_entries_total;
int user_highlight;
int user_key_pressed;
};
int compare(const void *d1, const void *d2)
{
return (strcmp((*(struct dir_item **)d1)->name,
(*(struct dir_item **)d2)->name)); // I THINK THE ISSUE IS HERE, BUT NOT SURE WHY
}
qsort(dir_entries, sizeof(dir_entries), sizeof(struct dir_item), compare);
我试过这个版本,但是没有排序(但没有报错)
int compare(const void *d1, const void *d2)
{
const struct dir_item *a = (struct dir_item *)d1;
const struct dir_item *b = (struct dir_item *)d2;
return strcmp(a->name, b->name);
}
您的 *
太多了,只需将 d1
和 d2
转换为 struct dir_item*
并取消引用:
int compare(const void *d1, const void *d2)
{
return (strcmp(((struct dir_item *)d1)->name,
((struct dir_item *)d2)->name));
}
我有一个 struct dir_item
的数组,我想使用 qsort
对它进行排序。
使用下面的代码我得到一个 Segmentation Fault 11
.
我想知道:
- 如何解决这个问题?
- 为什么我首先遇到这个问题
struct dir_item
{
char name[NAME_MAX];
int is_dir;
};
struct app_state
{
char cwd[PATH_MAX];
struct dir_item *dir_entries;
int dir_entries_total;
int user_highlight;
int user_key_pressed;
};
int compare(const void *d1, const void *d2)
{
return (strcmp((*(struct dir_item **)d1)->name,
(*(struct dir_item **)d2)->name)); // I THINK THE ISSUE IS HERE, BUT NOT SURE WHY
}
qsort(dir_entries, sizeof(dir_entries), sizeof(struct dir_item), compare);
我试过这个版本,但是没有排序(但没有报错)
int compare(const void *d1, const void *d2)
{
const struct dir_item *a = (struct dir_item *)d1;
const struct dir_item *b = (struct dir_item *)d2;
return strcmp(a->name, b->name);
}
您的 *
太多了,只需将 d1
和 d2
转换为 struct dir_item*
并取消引用:
int compare(const void *d1, const void *d2)
{
return (strcmp(((struct dir_item *)d1)->name,
((struct dir_item *)d2)->name));
}