2017-05-10 13 views
-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; 
} 
+1

:私はあなたには、サンプルコードを持って、ここでは、クラスのすべてのメンバーのための文字列を使用していますし、私のためにうまく働いていますか?あなたが投稿したコードは一見すると適切ではないようです。 'diplomStudent'の定義も投稿してください。 PS:あなたはどこでも削除されない 'group :: app'をコードリークします。 – jotik

+3

メモリ*は 'diplomStudent'に割り当てられます。しかし、あなたの教師があなたが 'std :: string'を使用することを妨げるほど愚かで、obj.surname'は何も指さない未処理のポインタです。プログラムで未定義の動作をします(クラッシュは一つの可能​​性ですUBの場合)。これは私のところでの推測であり、誰かがあなたの気分をどのようにしているかを知るための適切な[mcve]を提供していません。 – StoryTeller

+0

メモリの割り当てについては、これにベクトルを使用するのが好ましい方法ですが、new []経由で割り当てるためのコードは、犯人のようには見えません。しかし、私たちはdiplomStudentが何であるか分からないので、それを手助けすることはできませんが、このような問題の標準的な手順は、コンパイラを使ってコードを調べることです。 – stefaanv

答えて

1

問題は、クラス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; 
} 
関連する問題