【发布时间】:2021-01-11 09:23:05
【问题描述】:
我在运行时遇到此错误
0 [main] test 449 cygwin_exception::open_stackdumpfile: 将堆栈跟踪转储到 test.exe.stackdump
我对 c++ 编程比较陌生,我来自 python,我将链接代码,但谁能告诉我发生了什么以及可能是什么问题?
#include <string>
#include <iostream>
using namespace std;
struct grade
{
int totalCourses;
string mNumber;
string *courses = new string[totalCourses];
grade(int numOfCourses = 10)
{
totalCourses = numOfCourses;
}
~grade()
{
delete[] courses;
}
};
int main()
{
int totalGrades;
cout << "Enter num of grades: ";
cin >> totalGrades;
grade *gradeArray = new grade[12];
grade newGrade(6);
newGrade.mNumber = "M12345678";
cout << newGrade.mNumber << '\n';
gradeArray[0] = newGrade;
delete[] gradeArray;
return 0;
}
【问题讨论】:
-
另外,使用数组而不是更标准的向量有什么特别的原因吗?
-
这似乎是问题所在:
string *courses = new string[totalCourses]; -
gradeArray[0] = newGrade;另一个问题。您的grade类没有正确遵守rule of three。您正在分配grade对象,而grade的复制语义不正确。 -
好吧,在某些时候,OP 必须正确实现复制语义。也许通过这样做,他们将修复所有其他错误。或者只是使用
std::vector并让它完成工作。 -
每日调试提示: 创建一个minimal reproducible example。删除行,直到您有最少的行来证明您的问题。看起来您尝试了对
grade对象的一些测试;哪一个导致崩溃?你能避免将一个成绩分配给另一个成绩吗?消除阅读和设置mNumber字段?消除创建(和删除)一系列成绩对象?崩溃所需的最低限度是多少,崩溃发生在哪一行?
标签: c++ struct runtime-error dynamic-memory-allocation