繁体   English   中英

在 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);
}

你有太多* ,只需将d1d2转换为struct dir_item*并取消引用:

int compare(const void *d1, const void *d2)
{
    return (strcmp(((struct dir_item *)d1)->name,
                   ((struct dir_item *)d2)->name));
}

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM