0

ここにガイドが必要です

私は次のようなコードを取得しました

struct Point
{
   int x;
   int y;
};

それから私のクラスで私は関数を得ました

class MyClass
{
   private:
      Point myPoint[4];
   public:
     void setPoint();
};

void MyClass::setPoint()
{
   int xData,yData;

   for (int i=0;i<4;i++)
   {
      cout << "Please enter x-ordinate:";
      cin >> xData;

      cout << "Please enter y-ordinate:";
      cin >> yData;

      //at this part the code throw a segmentation core dump.
      myPoint[i].x = xData;
      myPoint[i].y = yData;
   }

}

最初の実行では何も起こりませんが、2番目のループではセグメンテーションコアダンプが発生します。私のコードはどうしたの?

main.cppの追加コード

#include "MyClass.h"

int main()
{
MyClass *mClass;

mclass->setPoint();
}

助けてくれてありがとう。

4

5 に答える 5

4

ポインタを使用する前にメモリを割り当てる必要があります。

int main()
{
    MyClass *mClass = new MyClass ();
    mclass->setPoint();
    return 0;
}
于 2012-10-26T16:47:47.970 に答える
0
MyClass *mClass;

mclass->setPoint();

そこにあなたの問題があります。オブジェクトを割り当てたことがなく、ポインタだけを割り当てたことがあります。

int main () 
{
  MyClass mclass;
  mclass.setPoint();
}

別の方法として、有効期間が変数のスコープを超えているオブジェクトが必要な場合は、オブジェクトに。を割り当てることができますnew

于 2012-10-26T16:48:01.137 に答える
0

問題は、オブジェクトの作成にあります。より正確には、コードではオブジェクトを作成していません。これは、メモリ割り当てが発生した単なるポインタです。次のようになります。

MyClass *mClass = new MyClass();
mClass->setPoint();
于 2012-10-26T16:50:47.013 に答える
0

オブジェクトのメモリ割り当てが必要です

MyClass *obj = new MyClass();
                ^

newは、メモリを動的に割り当てる言語構造です

于 2012-10-26T16:59:50.313 に答える
0

オブジェクトの構築に関連します。

MyClass *mClass;

つまり、Myclassポインターを取得します。このポインターには、Myclassタイプのオブジェクトを処理する機能があり、機能だけがあります。ただし、「実オブジェクト」はありません。「実オブジェクト」とは、システムヒープにメモリブロックを適用して取得することを意味します。それから

mclass->setPoint();

この呼び出しは、 Myclassクラスの関数を呼び出す代わりに、Myclassタイプのオブジェクトの関数を呼び出すことを意味します。

したがって、コードは正しい可能性があります:

MyClass *mClass = new MyClass ();
mclass->setPoint();

newキーワードは、Myclassタイプのオブジェクトにメモリブロックを適用することを意味します。

于 2012-10-26T17:00:29.640 に答える