0

我面临非法访问错误,但我不确定我的代码中发生了什么......

我有这样的课:

class MyClass
{
    cHapticDeviceHandler* handler;
public:
    MyClass(void){handler = new cHapticDeviceHandler();}
    ~MyClass(void){delete handler;}
    cHapticDeviceHandler* getHandler() {return handler;}
};

如果我创建这样的函数,我的代码就可以工作。我可以创建一个新对象并使用该 getHandler() 方法来毫无问题地使用 cHapticDeviceHandler*。

function A(){
   MyClass* obj1 = new MyClass();
   ...
}

但是,如果我尝试做这样的事情......

function B(){
   MyClass* obj1 = new MyClass();
   MyClass* obj2 = new MyClass();
}

第一个 obj1 的创建没有问题,但第二个在执行构造函数时因非法访问错误而崩溃。

如果我没记错的话,当你从一个类创建新对象时,它们的属性是不同的,所以每个对象都有自己的属性。考虑到这一点,我认为这些 cHapticDeviceHandler 指针在两个对象中是不同的,所以我不明白为什么首先做一个新的工作,然后再做一次就行不通了。

我很确定我做错了什么并且令人尴尬的buuuut ...我找不到问题出在哪里:$

任何人都可以给我一个提示吗?我被迫使用 Visual Studio 2008,而我正在使用 CHAI3D,以防万一这很重要。

4

2 回答 2

0

没有更多信息,我只能猜测。问题似乎是您尝试创建多个cHapticDeviceHandler. 也许它不支持创建多个实例,例如因为它使用一些static数据或使用独占资源(请参阅设备驱动程序)?

请查阅类的文档或代码cHapticDeviceHandler来验证这一点。

如果您真的只能创建一个这样的对象,您可以通过为该对象提供一个单例工厂来解决您的问题。

于 2014-02-01T13:53:39.757 回答
0

我的猜测是您不能创建多个 cHapticDeviceHandler 实例。所以当你创建第一个 MyClass 对象时,你很好,但是当你创建第二个 MyClass 对象时,它会尝试实例化另一个 cHapticDeviceHandler,这是不允许的。难道你只有一个设备,因此不能有两个处理程序吗?

于 2014-02-01T13:42:59.453 回答