C ++非法访问

时间:2014-02-01 13:36:27

标签: c++ illegalaccessexception

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

我有一个这样的课程:

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时没有问题,但是第二个obj1在执行构造函数时因非法访问错误而崩溃。

如果我没有错,当你从一个类创建新对象时,它们的属性是不同的,所以每个对象都有自己的属性。考虑到这一点,我认为那些cHapticDeviceHandler指针在两个对象中是不同的,所以我无法理解为什么在一开始就做新的工作,再做一次就行不通。

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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