堆异常-1073741510对象 我是一个全新的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); } #包括 使用名称空间std; 班级学生{ 私人: 常量字符*vn; 常量字符*nn; int-mn; int-fs; 公众: Student()=默认值; 学生(const char*vn,const char*nn,int mn,int fs):vn(vn),nn(nn),mn(mn),fs(fs){} 常量字符*getVn(){ 返回vn; } 常量char*getNn(){ 返回nn; } int getMnr(){ 返回mn; } int getFs(){ 返回fs; } }; 维沃顿班{ 私人: 无符号计数器=0; 学生*s=新学生[柜台]; 公众: 无效添加(学生和学生){ s[柜台]=学生; cout

堆异常-1073741510对象 我是一个全新的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); } #包括 使用名称空间std; 班级学生{ 私人: 常量字符*vn; 常量字符*nn; int-mn; int-fs; 公众: Student()=默认值; 学生(const char*vn,const char*nn,int mn,int fs):vn(vn),nn(nn),mn(mn),fs(fs){} 常量字符*getVn(){ 返回vn; } 常量char*getNn(){ 返回nn; } int getMnr(){ 返回mn; } int getFs(){ 返回fs; } }; 维沃顿班{ 私人: 无符号计数器=0; 学生*s=新学生[柜台]; 公众: 无效添加(学生和学生){ s[柜台]=学生; cout,c++,exception,heap,new-operator,C++,Exception,Heap,New Operator,好吧,看看这两行代码: class Verwaltung{ unsigned counter = 0; Student *s = new Student[counter]; } 因此,您的s指针将指向一个0大小的数组,因此您要将所有学生分配给未分配的内存,如果该内存不属于您的程序,或者上面有其他内容,您将损坏内存,因此您的程序将失败 如果要自动完成所有这些检查,请使用std::vector 事实上,错误-1073741510对应于0xc000013a,这是一个错误,表示程序异常

好吧,看看这两行代码:

class Verwaltung{
    unsigned counter = 0;
    Student *s = new Student[counter];
}
因此,您的
s
指针将指向一个0大小的数组,因此您要将所有学生分配给未分配的内存,如果该内存不属于您的程序,或者上面有其他内容,您将损坏内存,因此您的程序将失败

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


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

当您创建
v
时,它能容纳多少名
学生
?您是否通过调试器运行代码以了解它何时崩溃?您可以使用
std::vector
动态数组“代码编译有时成功”不要混淆编译和运行生成的可执行文件。编译可能失败,也可能失败,但通常不是“有时”@假设它没有崩溃。它没有崩溃。它只是不返回0。我想尝试数组而不是向量。为什么?为什么让自己的生活更艰难?专业程序员不会这样做。你链接的参考实际上说,
0xc00013a
意味着程序终止是因为用户请求it@AsteroidsWithWings对对不起,我的fault@idclev463035818是的,你是对的,但是网络上没有关于这个错误的文档,我想说的是,这个错误是由其他原因引起的,在这个例子中,可能是这样,在文章中,用户ctrl+c