C 非法访问

C++ Illegal Access

本文关键字:访问 非法      更新时间:2023-10-16

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

我有这样的课程:

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,以防万一很重要。

我的猜测是您不能创建一个以上的chapticdevicehandler实例。因此,当您创建第一个MyClass对象时,您就可以了,但是当您创建第二个myClass对象时,它将尝试实例化另一个Chapticdevicehandler,而这将不允许。可能是您只有一个设备,因此不能有两个处理程序?

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

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

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