c++ - 导致断点的 window

标签 c++ pointers dynamic

我正在为学习指针和内存管理的类作业编写程序。在此赋值中使用 new 运算符为学生和类(class)分配内存是必要的,程序似乎运行正常,但在打印所有内容后程序崩溃,并表示已触发断点。任何帮助将不胜感激。

错误位于此处,但我不确定它是什么意思 /* 验证 block 类型 */ _ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

struct Student //Structs
    {
        string firstName, lastName, aNumber;
        double GPA;
    };
struct Course
    {
        int courseNumber, creditHours;
        string courseName;
        char grade;
    };

Student* readStudent();                                    // Function Prototypes
Course* readCourseArray(int&);
void computeGPA(Student *student, Course *courseArray, int coursesTaken);
void printSummary(Student *studentPTR, Course *courseArray, int courses);
int main()                                                //Main
{
    int courses = 0;
    Student *studentPTR = readStudent();
    Course *coursePTR = readCourseArray(courses);
    computeGPA(studentPTR, coursePTR, courses);
    printSummary(studentPTR, coursePTR, courses);


    delete studentPTR;
    delete coursePTR;
    system ("pause");
    return 0;
}

Student* readStudent()                                       // Read Student
{
    Student* student = new Student;
    cout<<"\nEnter students first name\n";
    cin>>student->firstName;
    cout<<"\nEnter students last name\n";
    cin>>student->lastName;
    cout<<"\nEnter students A-Number\n";
    cin>>student->aNumber;


    return student;
}

Course* readCourseArray(int &courses)                           //Read Courses
{
    cout<<"\nHow many courses is the student taking?\n";
    cin>>courses;
    const int *sizePTR = &courses;
    Course *coursePTR = new Course[*sizePTR]; 

    for(int count = 0; count < *sizePTR; count++)  //Enter course information
    {
        cout<<"\nEnter student "<<count+1<<"'s course name\n";
        cin>>coursePTR[count].courseName;
        cout<<"\nEnter student "<<count+1<<"'s course number\n";
        cin>>coursePTR[count].courseNumber;
        cout<<"\nEnter student "<<count+1<<"'s credit hours\n";
        cin>>coursePTR[count].creditHours;
        cout<<"\nEnter student "<<count+1<<"'s grade\n";
        cin>>coursePTR[count].grade;
    } 


    return coursePTR;
}


void computeGPA(Student *studentPTR, Course *courseArray, int coursesTaken)             // Compute GPA
{
    double total = 0, hours = 0;
    for(int count = 0; count < coursesTaken; count++)
    {
        hours += courseArray[count].creditHours;
        if (courseArray[count].grade == 'A')
            total+=4;
        else if (courseArray[count].grade == 'B')
            total+=3;
        else if (courseArray[count].grade == 'C')
            total+=2;
        else if (courseArray[count].grade == 'D')
            total+=1;
        else if (courseArray[count].grade == 'F')
            total+=0;
    }
    studentPTR->GPA = (total / hours);
}


void printSummary(Student *studentPTR, Course *courseArray, int courses)
{
    cout<<"\nReport\n";
    cout<<"\nNumber   Name                    Hours  Letter Grade  Point Grade";  
    cout<<"\n------   ----                    -----  ------------  -----------\n";
    for(int count = 0; count < courses; count++)
         cout<<setw(3)<<courseArray[count].courseNumber<<"   "<<courseArray[count].courseName<<setw(20)<<"   "<<courseArray[count].creditHours<<setw(5)<<"  "<<courseArray[count].grade<<endl;

    cout<<"\nStudent :"<<studentPTR->firstName<<" "<<studentPTR->lastName;
    cout<<"\nA-Number :"<<studentPTR->aNumber;
    cout<<"\nOverall GPA :"<<studentPTR->GPA;
}

最佳答案

您正在使用 operator new[](用于数组)分配类(class),但使用 operator delete 而不是 operator delete[] 释放它。

你应该像那样释放它:

delete[] coursePTR;

我也不明白为什么要使用sizePTR指针而不是直接使用courses

顺便说一句,你要知道,这不是一个“查找我的错误”网站。您有一个代码审查网站。

关于c++ - 导致断点的 window ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9415774/

相关文章:

c++ - 无法创建动态文件夹名称

C++ Quantlib Vanilla 交换 : setting future fixing dates and gearing for floating leg

c++ - 在对C++程序进行反向工程时,如何将std::basic_string <char>转换为Rust可读的值?

c# - 通过字符串获取c#动态属性的值

Linux shell 临时 DNS

string - Delphi - 从字符串表单名称创建自定义表单实例(使用自定义构造函数创建)

c++ - 为什么很少有人输入 const 正确的代码? const 正确的代码会编译得更好/更快吗?

c++ - 如何将列表类转换为模板,以便它可以处理任何数据?

C - 如何使函数返回指针?

使用指针将浮点矩阵复制并转换为 double 矩阵