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;
}