我正面临非法访问错误,但我不确定我的代码中发生了什么......
我有一个这样的课程:
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,以防万一这很重要。
答案 0 :(得分:0)
我的猜测是你不能创建多个cHapticDeviceHandler实例。所以当你创建第一个MyClass对象时,你很好,但是当你创建第二个MyClass对象时,它会尝试实例化另一个cHapticDeviceHandler,这是不允许的。难道你只有一台设备,因此不能有两台处理器吗?
答案 1 :(得分:0)
没有更多信息,我只能猜测。问题似乎是您尝试创建cHapticDeviceHandler
的多个实例。也许它不支持创建多个实例,例如因为它使用了一些static
数据或使用独占资源(参见设备驱动程序)?
请参阅cHapticDeviceHandler
类的文档或代码以验证这一点。
如果你真的只能创建一个这样的对象,你可以通过为对象提供一个单独的工厂来解决你的问题。