问题描述
我有一个自定义类,我们称之为“Student”和一个主要方法。我正在实例化类,只想输出类的内容。
我的程序崩溃了:Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
实际代码
学生.h
#ifndef PROG2_STUDENT_H
#define PROG2_STUDENT_H
#include <iostream>
class Student
{
private:
char *name;
char *firstName;
unsigned matriculationNumber;
unsigned semester;
public:
Student(char *name,char *firstName,unsigned matriculationNumber,unsigned semester);
~Student();
friend std::ostream &operator<<(std::ostream &ostream,const Student &student);
private:
};
#endif
学生.cpp
#include <cstring>
#include "Student.h"
Student::Student(char *name,unsigned semester)
{
std::strcpy(this->name,name);
std::strcpy(this->firstName,firstName);
this->matriculationNumber = matriculationNumber;
this->semester = semester;
}
Student::~Student()
{
delete[] this->name;
delete[] this->firstName;
}
std::ostream &operator<<(std::ostream &stream,const Student &input)
{
stream << input.name << "," << input.firstName << ": "
<< input.semester << " Semester,MA " << input.matriculationNumber;
return stream;
}
和我的主要
#include <iostream>
#include "StudentPackage/Collection/StudentCollection.h"
int main()
{
Student studentOne((char *)"Testerson",(char *)"Test",12345,2);
std::cout << studentOne << std::endl;
return 0;
}
我尝试了什么
我尝试了几种方法,包括 memcpy。但是使用 memcpy 我无法正确检测字符数组的大小。
当我将学生构造函数更改为以下内容时,析构函数中的删除/释放出现问题。我想,无论如何这都不是正确的方法,但这种情况正在发生,因为在调用类析构函数之前输入变量的作用域已被销毁,对吗?
Student::Student(char *name,unsigned semester)
{
this->name = name;
this->firstName = firstName;
this->matriculationNumber = matriculationNumber;
this->semester = semester;
}
问题
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)