应用程序在运行后崩溃,请帮忙!
我创建一个包含2个值的向量的头文件是X和Y. Vector2D.h:
#ifndef VECTOR2D_H
#define VECTOR2D_H
class Vector2D
{
public:
Vector2D(float x , float y ):object_x(x) , object_y(y) {}
float getX() {return object_x;}
float getY() {return object_y;}
void setX(float x) {object_x = x;}
void setY(float y) {object_y = y;}
private:
float object_x;
float object_y;
};
#endif
这是头文件我声明了一个访问向量的指针 OMH.h
#include "Vector2D.h"
#include <iostream>
#ifndef OMH_H
#define OMH_H
using namespace std;
class OMH
{
public:
OMH();
~OMH(void);
void display();
Vector2D *getMouse()
{return mouse;}
private:
int x;
Vector2D *mouse;
};
#endif
OMH.cpp
OMH::OMH()
{
}
OMH::~OMH(void)
{
}
void OMH::display()
{
mouse->setX(5);
mouse->setY(1);
cout<<mouse->getX();
}
当我构建它时,它成功了
的main.cpp
#include <iostream>
#include "OMH.h"
#include "Vector2D.h"
using namespace std;
int main()
{
OMH * object;
object->getMouse();
return 0;
}
当我运行它时,它会显示一个错误框,上面写着:&#34;正在使用的对象被使用!&#34; 然后就崩溃了。
答案 0 :(得分:3)
OMH* object;
创建未初始化的指针。 object
并未指向OMH
个实例,因此当您致电getMouse()
时,您将产生未定义的行为。这里不需要使用指针,因此您只需在堆栈中创建一个OMH
对象:
OMH object;
object.getMouse();
OMH::mouse
存在同样的问题。它是一个没有指向有效内存块的指针。您应该质疑该情况是否确实需要指针。
答案 1 :(得分:2)
指针只是一个可以在内存中存储地址的变量。您需要实际创建OMH
的实例:
OMH *object = new OMH;
// Do stuff
delete object;
尽管很可能,你毕竟不需要指针,而只能使用自动变量:
OMH object;
object.getMouse();
答案 2 :(得分:0)
首先,
OMH * object;
只是声明一个指向OMH
的指针,它不指向任何东西(它是默认初始化的)。所以当你这样做时
object->getMouse();
你得到未定义的行为(在你的情况下崩溃)。
您需要初始化指针
OMH* object = new OMH; // don't forget to delete
或更好,使用智能指针
std::unique_ptr<OMH> object(new OMH); // or use std::make_unique<> in C++14
此外,在构造函数OMH::OMH()
中,您可能希望初始化指针mouse
,因为现在看起来mouse
没有指向任何有效的内容。