首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >警告:删除数组“.”munmap_chunk():无效指针命令被信号6终止

警告:删除数组“.”munmap_chunk():无效指针命令被信号6终止
EN

Stack Overflow用户
提问于 2021-09-05 05:24:28
回答 1查看 250关注 0票数 1

目前,我正在尝试学习和使用这个程序中的析构函数。我已经创建了一个名为“学生”的类,它可以为我存储在数组中的3个主题获取卷号、名称和标记。我无法删除为存储学生分数而创建的数组.

我收到了一个错误/警告信息..。

在析构函数‘学生::~学生()’:: 65 :14:警告:删除数组((学生*)此)->Student::marks‘65 delete[]标记;^ munmap_chunk():无效指针命令终止于信号6

代码语言:javascript
复制
#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;
    
}
EN

回答 1

Stack Overflow用户

发布于 2021-09-05 06:13:50

删除用于释放通过调用新的在堆上动态分配的内存。delete[]new[]也是如此。

您没有动态分配任何内存,因此不需要释放它。在这种情况下,您不需要析构函数。

您也不会在delete调用中使用&。

如果您想保留析构函数,因为您说您正在学习,那么您需要通过调用new为类成员分配内存,但是成员需要是指针.

代码语言:javascript
复制
private:
        int* rollNumber;
        string* name;
        int* marks;

并为它们分配内存,最好是在构造函数中。

代码语言:javascript
复制
Student::Student() : 
    rollNumber(new int(0)),
    name(new string("")),
    marks(new int[3]))
{}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69060741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档