【问题标题】:Heap exception -1073741510 Object堆异常 -1073741510 对象
【发布时间】:2020-06-06 20:18:19
【问题描述】:

我完全是 C++ 新手。任何人都可以用以下代码解释为什么它会给出堆异常。我正在尝试从具有不同 Student 对象的 Type 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);
} 

【问题讨论】:

  • 当你创建v时,它可以容纳多少Students?您是否还通过调试器运行代码以了解它何时崩溃?
  • 您可以将std::vector 用于动态数组
  • “代码编译有时会成功”不要混淆编译和运行生成的可执行文件。编译要么失败要么不,但通常不是“有时”
  • @cigien 它没有崩溃。它不会崩溃。它只是不返回 0。
  • 我想尝试使用数组而不是向量 为什么?为什么要让自己的生活更艰难?专业程序员不会那样做。

标签: c++ exception heap-memory new-operator


【解决方案1】:

好吧,看看这 2 行代码:

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

所以你的s 指针将指向一个大小为 0 的数组,因此你要为所有学生分配未分配的内存,如果该内存不属于你的程序,或者有什么东西否则,您将损坏内存,因此您的程序将失败。

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

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

【讨论】:

  • 您链接的参考实际上说0xC000013A 表示程序因用户请求而终止
  • @AsteroidsWithWings 是的,对不起,我的错
  • @idclev463035818 是的,您是对的,但是网络上没有关于此错误的文档,我想说的是该错误是由其他原因引起的,在这种情况下可能是所以,在文章的情况下,用户 ctrl+c
猜你喜欢
  • 2014-06-28
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 2020-05-05
  • 2012-08-04
相关资源
最近更新 更多