c++结构体qsort


#include<iostream>
#include<iomanip>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<vector>
#include<stdio.h>
#include<algorithm>
#include<cmath>
using namespace std;
struct stu{
    string name;
    int li;
    int shi;
}student[1010];
int cmp(const void*x,const void*y){
    struct stu* xx = (struct stu*)x;
    struct stu* yy = (struct stu*)y;
    return (yy->li+yy->shi)-(xx->li+xx->shi);
}
int main(){
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        
        for(int i=0;i<n;i++){
            cin>>student[i].name>>student[i].li>>student[i].shi;
        }
        qsort(&student[0], sizeof(student) / sizeof(student[0]), sizeof(student[0]), cmp);
        
        for(int j=0;j<n;j++){
            cout<<student[j].name<<endl;
        }
    }
    
}

为什么这会有问题?

img


struct stu
{
    char name[20]; //string name
    int li;
    int shi;
};

int cmp(const void *x, const void *y)
{
    struct stu *xx = (struct stu *)x;
    struct stu *yy = (struct stu *)y;
    return (yy->li + yy->shi) - (xx->li + xx->shi);
}
int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        int n;
        cin >> n;
        struct stu *student = new struct stu[n];

        for (int i = 0; i < n; i++)
        {
            cin >> student[i].name >> student[i].li >> student[i].shi;
        }
        qsort(student, n, sizeof(stu), cmp);

        for (int j = 0; j < n; j++)
        {
            cout << student[j].name << endl;
        }
        delete student;
    }

    return 0;
}