Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;非法访问_C++_Illegalaccessexception - Fatal编程技术网

C++ C++;非法访问

C++ C++;非法访问,c++,illegalaccessexception,C++,Illegalaccessexception,我面临非法访问错误,但我不确定代码中发生了什么 我有一门课是这样的: class MyClass { cHapticDeviceHandler* handler; public: MyClass(void){handler = new cHapticDeviceHandler();} ~MyClass(void){delete handler;} cHapticDeviceHandler* getHandler() {return handler;} }; 如果

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

我有一门课是这样的:

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
实例。可能它不支持创建多个实例,例如,因为它使用一些
静态数据或使用独占资源(请参阅设备驱动程序)

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


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

欢迎这样做。我能给你的最好提示是试着调试你的应用程序,看看是什么引起了问题。使用断点并一步一步地执行。我们这里没有所有的代码,您所展示的看起来也不是问题的根源。另一句话:您使用new分配内存,但没有取消分配,这会导致内存泄漏。请提供有效代码MyClass obj1=new MyClass();可能不是你写的。cHapticDeviceHandler是干什么的?我正在使用调试器,导致问题的那一行是第二个对象创建调用时的“MyClass(void){handler=new cHapticDeviceHandler();}”。谢谢你的内存泄漏@弗朗斯:是的。。。这是有效的代码,我的代码就是这样写的。cHapticDeviceHandler是CHAI3D中的一个类:“这个类实现了一个管理器,它列出了计算机上可用的不同设备并为它们提供句柄。”那么,您不想编写MyClass*obj1=new MyClass();?否则您将编写一个指向实例的指针,这至少不是很常见。@frans是的,对不起。复印的时候我忘了带*了。我编辑了我的第一篇文章。谢谢。这是可能的,尽管我在。
MyClass*obj1=new MyClass()中没有看到任何提及;删除obj1;MyClass*obj2=new MyClass()
也将失败。删除obj1后它不应该崩溃如果是这样的话,是吗?如果我做了类似。。。MyClass obj1=new MyClass(),然后我使用delete obj1删除对象,使用MyClass obj2=new MyClass()时仍然会出现问题。这难道不意味着这不是问题所在吗?@user3260442 MyClass没有析构函数,删除时不会删除cHapticDeviceHandler。所以仍然有两个。我以为默认析构函数是为我做的
~MyClass(void){delete handler;}
就足够了吗?我试着这么做,但我也有同样的行为。