目前,我正在尝试学习和使用这个程序中的析构函数。我已经创建了一个名为“学生”的类,它可以为我存储在数组中的3个主题获取卷号、名称和标记。我无法删除为存储学生分数而创建的数组.
我收到了一个错误/警告信息..。
在析构函数‘学生::~学生()’:: 65 :14:警告:删除数组((学生*)此)->Student::marks‘65 delete[]标记;^ munmap_chunk():无效指针命令终止于信号6
#include<iostream>
using namespace std;
//This class gets rollNo, name, marks for 3 subjects....
class Student
{
private:
int rollNumber;
string name;
int marks[3];
public:
void setRollnumber(int roll)
{
rollNumber = roll;
}
void setName(string name)
{
this->name = name;
}
void setMarks(int marks1, int marks2, int marks3)
{
this -> marks[0] = marks1;
this -> marks[1] = marks2;
this -> marks[2] = marks3;
}
int totalMarks();
char grade(int totalMarks, int maxMarks);
~Student();
};
//Finds the total marks...
int Student :: totalMarks()
{
int total = 0;
for(int i=0; i<3; i++)
{
total += marks[i];
}
return total;
}
//Returns the grade...
char Student :: grade(int totalMarks, int maxMarks)
{
float percent = ((float)totalMarks / (float)maxMarks) * 100;
char grade;
grade = percent >= 90 ? 'A' : (percent >= 75) ? 'B' : (percent >= 50) ? 'C' : 'F';
return grade;
}
//Destructor....
Student :: ~Student()
{
delete &rollNumber;
delete &name;
delete[] marks;
}
int main(){
Student bee;
bee.setRollnumber(50);
bee.setName("Bee");
bee.setMarks(90, 80, 70);
int total_marks_scored = bee.totalMarks();
cout<<"Total Marks : "<<total_marks_scored<<endl;
cout<<"Grade Obtained : "<<bee.grade(total_marks_scored, 300);
return 0;
}发布于 2021-09-05 06:13:50
删除用于释放通过调用新的在堆上动态分配的内存。delete[]和new[]也是如此。
您没有动态分配任何内存,因此不需要释放它。在这种情况下,您不需要析构函数。
您也不会在delete调用中使用&。
如果您想保留析构函数,因为您说您正在学习,那么您需要通过调用new为类成员分配内存,但是成员需要是指针.
private:
int* rollNumber;
string* name;
int* marks;并为它们分配内存,最好是在构造函数中。
Student::Student() :
rollNumber(new int(0)),
name(new string("")),
marks(new int[3]))
{}https://stackoverflow.com/questions/69060741
复制相似问题