C++ 对象数组的内存分配
我有一个类。我的代码编译正确,但当我试图从键盘输入这个数组时,我的程序停止工作。我认为问题在于内存分配。如何正确分配内存来解决这个问题C++ 对象数组的内存分配,c++,object,memory-management,C++,Object,Memory Management,我有一个类。我的代码编译正确,但当我试图从键盘输入这个数组时,我的程序停止工作。我认为问题在于内存分配。如何正确分配内存来解决这个问题 class group { protected: diplomStudent *arr; int size; public: group(int studs) { arr=new diplomStudent[studs]; size=s
class group
{
protected:
diplomStudent *arr;
int size;
public:
group(int studs)
{
arr=new diplomStudent[studs];
size=studs;
}
void setgroup()
{
for(int i=0;i<size;i++)
cin>>arr[i];//'>>' is overloaded for diplomstudent
}
}
主要功能:
int main()
{
group g1(2);
g1.setgroup();
return 0;
}
问题一定出在学生类别的定义中,但由于您没有提供该信息,我们无法确定。我为类的所有成员使用了一个字符串,对我来说效果很好,下面是示例代码:
#include <iostream>
#include <string>
using namespace std;
class diplomStudent
{
public:
string surname, name, patr, course, rate, diplom, perscent;
friend istream& operator>>(istream& is, diplomStudent& obj)
{
is >> obj.surname; is >> obj.name; is >> obj.patr; is >> obj.course;
is >> obj.rate; is >> obj.diplom; is >> obj.perscent;
return is;
}
};
class group
{
protected:
diplomStudent *arr;
int size;
public:
group(int studs) : arr(new diplomStudent[studs]), size(studs) {}
~group() { delete[] arr; }
void setGroup()
{
for (int i = 0; i < size; ++i)
cin >> arr[i]; //'>>' is overloaded for diplomStudent
}
void printGroup()
{
for (int i = 0; i < size; ++i)
cout << arr[i].surname << " " << arr[i].name << " " << arr[i].patr << " " << arr[i].course
<< " " << arr[i].rate << " " << arr[i].diplom << " " << arr[i].perscent << endl;
}
};
int main()
{
group g1(2);
g1.setGroup();
g1.printGroup();
return 0;
}
#包括
#包括
使用名称空间std;
班级学生
{
公众:
字串姓氏、姓名、牌号、路线、牌号、牌号、牌号、个人;
friend istream&operator>>(istream&is、diplomStudent&obj)
{
is>>obj.name;is>>obj.name;is>>obj.patr;is>>obj.course;
is>>目标费率;is>>目标费率;is>>目标费率;
回报是;
}
};
班级
{
受保护的:
迪普洛姆学生*arr;
整数大小;
公众:
组(内部螺柱):arr(新螺柱),尺寸(螺柱){}
~group(){delete[]arr;}
void setGroup()
{
对于(int i=0;i>arr[i];/“>>”对于学生来说是超负荷的
}
void printGroup()
{
对于(int i=0;i 你知道你到底犯了什么错误吗?你发布的代码乍一看似乎并不相关。请同时发布diplomStudent
的定义。PS:你的代码泄漏group::app
,不会被删除。内存分配给diplomStudent
。但是如果你的老师愚蠢到要阻止如果您不使用std::string
,而使用obj。姓氏是一个不指向任何内容的原始指针,那么您的程序中将有未定义的行为(UB可能出现崩溃).这只是我的猜测,你没有提供一个合适的方法让任何人知道你是怎么搞砸的。关于内存分配,首选的方法是使用一个向量,但通过new[]分配代码似乎不是罪魁祸首。但是,我们不知道什么是diplomStudent,因此我们无法帮助解决这类问题,但解决这类问题的标准过程是使用编译器检查代码。
#include <iostream>
#include <string>
using namespace std;
class diplomStudent
{
public:
string surname, name, patr, course, rate, diplom, perscent;
friend istream& operator>>(istream& is, diplomStudent& obj)
{
is >> obj.surname; is >> obj.name; is >> obj.patr; is >> obj.course;
is >> obj.rate; is >> obj.diplom; is >> obj.perscent;
return is;
}
};
class group
{
protected:
diplomStudent *arr;
int size;
public:
group(int studs) : arr(new diplomStudent[studs]), size(studs) {}
~group() { delete[] arr; }
void setGroup()
{
for (int i = 0; i < size; ++i)
cin >> arr[i]; //'>>' is overloaded for diplomStudent
}
void printGroup()
{
for (int i = 0; i < size; ++i)
cout << arr[i].surname << " " << arr[i].name << " " << arr[i].patr << " " << arr[i].course
<< " " << arr[i].rate << " " << arr[i].diplom << " " << arr[i].perscent << endl;
}
};
int main()
{
group g1(2);
g1.setGroup();
g1.printGroup();
return 0;
}