堆异常-1073741510对象

问题描述 投票:-1回答:1

我是C ++的新手。谁能解释我为什么用下面的代码给出堆异常。我试图从具有不同Student对象的Student类型创建数组。该代码有时会成功编译,有时会返回-1073741510并需要更长的时间。

#include <iostream>
using namespace std;

class Student{
private:
    const char* vn;
    const char* nn;
    int mn;
    int fs;
public:
    Student() = default;
    Student(const char* vn, const char* nn, int mn, int fs): vn(vn), nn(nn), mn(mn), fs(fs){}

    const char* getVn() {
        return vn;
    }
    const char* getNn() {
        return nn;
    }
    int getMnr() {
        return mn;
    }
    int getFs() {
        return fs;
    }
};

class Verwaltung{
private:
    unsigned counter = 0;
    Student *s = new Student[counter];
public:
    void add(Student &student){
        s[counter]=student;
        cout << counter << " " << s[counter].getNn() << " " << s[counter].getVn() << " " << s[counter].getMnr() << " " << s[counter].getFs() << endl;
        ++counter;
    }
};

int main(){
    Student s1("Micha", "Nugel", 3213, 8);
    Student s2("Mohan", "Sasa", 32211, 3);
    Student s3("Johan", "Goat", 3213, 2);
    Student s4("Meise", "Kreise", 3123, 1);
    Verwaltung v;
    v.add(s1);
    v.add(s2);
    v.add(s3);
    v.add(s4);
} 
c++ exception heap new-operator
1个回答
0
投票

嗯,看看这两行代码:

class Verwaltung{
    unsigned counter = 0;
    Student *s = new Student[counter];
}

因此,您的s指针将指向一个0大小的数组,因此您将向所有学生分配未分配的内存,并且如果该内存不属于您的程序,或者还有其他内容在它上面,您将破坏内存,因此您的程序将失败。

如果您希望所有这些检查都自动完成,请使用std::vector

Infact,错误-1073741510对应于0xc000013a,这是一个错误信号,表明程序已异常停止(这种情况可能是由SO为了防止内存损坏或出于安全原因,例如“不读取其他程序内存” )

© www.soinside.com 2019 - 2024. All rights reserved.