-1
私はclass.Myコードが正しくコンパイルされていますが、キーボードからこの配列を入力しようとするとプログラムが動作しなくなります。メモリ割り当てに問題があると思います。割り当て方法適切にこの問題を解決するためのメモリ?オブジェクト配列のメモリ割り当て
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
}
}
オーバーロード操作;
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;
}
主な機能は:
int main()
{
group g1(2);
g1.setgroup();
return 0;
}
:私はあなたには、サンプルコードを持って、ここでは、クラスのすべてのメンバーのための文字列を使用していますし、私のためにうまく働いていますか?あなたが投稿したコードは一見すると適切ではないようです。 'diplomStudent'の定義も投稿してください。 PS:あなたはどこでも削除されない 'group :: app'をコードリークします。 – jotik
メモリ*は 'diplomStudent'に割り当てられます。しかし、あなたの教師があなたが 'std :: string'を使用することを妨げるほど愚かで、obj.surname'は何も指さない未処理のポインタです。プログラムで未定義の動作をします(クラッシュは一つの可能性ですUBの場合)。これは私のところでの推測であり、誰かがあなたの気分をどのようにしているかを知るための適切な[mcve]を提供していません。 – StoryTeller
メモリの割り当てについては、これにベクトルを使用するのが好ましい方法ですが、new []経由で割り当てるためのコードは、犯人のようには見えません。しかし、私たちはdiplomStudentが何であるか分からないので、それを手助けすることはできませんが、このような問題の標準的な手順は、コンパイラを使ってコードを調べることです。 – stefaanv