Какая проблема возникает, когда я использую строку в qsort - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь отсортировать структуру, содержащую строку, по возрасту и индексу. Однако, когда я пытаюсь выполнить qsort, g ++ 8.3.0 выдает ошибку времени выполнения. Я решил эту проблему путем qsorting структуры только с возрастом и индексом, но я не уверен, в чем проблема.

Я думаю, что это из-за строки в структуре. Но я хочу объяснить, в чем причина.

Не встречается в Visual Studio cpp и Visual Code G ++ 9.2.0.

struct tagMemberInfo{
    string name;
    int index, age;
    tagMemberInfo() : name(""), index(0), age(0) {}
}; typedef tagMemberInfo Member;

int MemberSortCoreFunction(const void * a, const void * b)
{
    if ((*(Member*)a).age > (*(Member*)b).age) return 1;

    else if ((*(Member*)a).age == (*(Member*)b).age)
    {
        if ((*(Member*)a).index > (*(Member*)b).index)
            return 1;
        else if ((*(Member*)a).index < (*(Member*)b).index)
            return -1;
        else if ((*(Member*)a).index == (*(Member*)b).index)
            return 0;
        else return -1;
    }

    else if ((*(Member*)a).age < (*(Member*)b).age) return -1;

    else return -1;
};

vector<Member> vMember;

qsort(&vMember[0], vMember.size(), sizeof(Member), MemberSortCoreFunction);
...