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

}

在第一次运行时没有任何反应,但在第二次循环中,发生分段核心转储。我的代码有什么问题?

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 *obj = new MyClass();
                ^

new是一种动态分配内存的语言结构

于 2012-10-26T16:59:50.313 回答
0

与对象的构造有关。

MyClass *mClass;

意味着你得到一个Myclass指针,这个指针有能力处理一个Myclass类型的对象,只是有能力。但是您没有“真实对象”,“真实对象”意味着您在系统堆上申请并获得一块内存。然后

mclass->setPoint();

这个调用意味着调用 Myclass-type对象的函数,而不是调用Myclass-class的函数。

因此,代码可能是正确的:

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

new 关键字意味着为 Myclass 类型的对象应用一块内存。

于 2012-10-26T17:00:29.640 回答
0

问题在于创建对象。更准确地说,在您的代码中,您没有创建一个对象。它只是一个发生内存分配的指针。应该是这样的:

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