нелегальный доступ — C ++ нелегальный доступ

Я сталкиваюсь с ошибкой незаконного доступа, но я не уверен, что происходит в моем коде …

У меня есть такой класс:

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 различаются в двух объектах, поэтому я не могу понять, почему создание нового в первую очередь работает, а повторное выполнение просто не будет работать.

Я почти уверен, что делаю что-то действительно не так и смущаюсь … я не могу найти, в чем проблема: $

Может ли кто-нибудь дать мне подсказку, пожалуйста? Я вынужден использовать Visual Studio 2008, и я использую CHAI3D, на случай, если это важно.

0

Решение

Я предполагаю, что вы не можете создать более одного экземпляра cHapticDeviceHandler. Поэтому, когда вы создаете первый объект MyClass, у вас все хорошо, но когда вы создаете второй объект MyClass, он попытается создать экземпляр другого cHapticDeviceHandler, и это не будет разрешено. Может ли быть так, что у вас есть только одно устройство, и поэтому у вас не может быть двух обработчиков для него?

0

Другие решения

Без дополнительной информации я могу только догадываться. Кажется, проблема в том, что вы пытаетесь создать более одного экземпляра cHapticDeviceHandler, Может быть, он не поддерживает создание более одного экземпляра, например потому что он использует некоторые static данные или использует эксклюзивные ресурсы (см. драйвер устройства)?

Обратитесь к документации или коду cHapticDeviceHandler класс, чтобы проверить это.

Если вы действительно можете создать только один такой объект, вы можете решить свою проблему, предоставив одноэлементную фабрику для этого объекта.

0

По вопросам рекламы [email protected]