【发布时间】: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