为什么qsrot函数执行后,a1[0]的id--10000011后带有一个U?

这是函数执行前:

img

这是函数执行后:

img

问题:

为什么qsrot函数执行后,a1[0]的id--10000011后带有一个U?a1[0]中的cai变成了
-84215这类乱码?

原码:

img

int cmp1(const void* a, const void* b)
{
Person* a1 = (Person )a;
Person
a2 = (Person *)b;
if (a1->all != a2->all) return (a1->all > a2->all ? 1 : -1);
else if (a1->de != a2->de) return (a1->de > a2->de ? 1 : -1);
else if (strcmp(a1->id, a2->id) != 0) return -(strcmp(a1->id, a2->id));
}

int num,L,H;
cin >> num;
getchar();
cin >> L;
getchar();
cin >> H;
Person<int>* a,*a1,*a2,*a3,*a4;
int i1, i2, i3, i4;
i1 = i2 = i3 = i4 = 0;
a = new Person<int>[num];
a1 = new Person<int>[num];
a2 = new Person<int>[num];
a3 = new Person<int>[num];
a4 = new Person<int>[num];
for (int i = 0; i < num; i++)
{
    cin>>a[i].id;
    getchar();
    cin >> a[i].de;
    getchar();
    cin >> a[i].cai;
    if (a[i].cai >= L && a[i].de >= L)
    {
        if (a[i].de >= H && a[i].cai >= H)
        {
            a1[i1] = a[i];
            i1++;
        }
        else if (a[i].de >= H && a[i].cai < H)
        {
            a2[i2] = a[i];
            i2++;
        }
        else if (a[i].de < H && a[i].cai < H&&a[i].de>a[i].cai)

        {
            a3[i3] = a[i];
            i3++;
        }
        else
        {
            a2[i4] = a[i];
            i4++;
        }
    }
}
qsort(a1, i1, sizeof(int), cmp1);
qsort(a2, i2, sizeof(int), cmp1);
qsort(a3, i3, sizeof(int), cmp1);
qsort(a4, i4, sizeof(int), cmp1);
cout << i1 + i2 + i3 + i4<<endl;
for (int i = 0; i < i1; i++)
{
    cout << a1[i].id << " " << a1[i].de << " " << a1[i].cai << endl;
}
for (int i = 0; i < i2; i++)
{
    cout << a2[i].id << " " << a2[i].de << " " << a2[i].cai << endl;
}
for (int i = 0; i < i3; i++)
{
    cout << a3[i].id << " " << a3[i].de << " " << a3[i].cai << endl;
}

这么说可能是qsort的原因,把sizeof(int)改成sizeof(*a)

a1,a2,a3,a4都动态声明成了num大小,但实际使用的时候并没有填满num。