C ++ Незаконный доступ

0

Я столкнулся с ошибкой Illegal Access, но я не уверен, что происходит в моем коде...

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

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 создается без проблем, но второй просто сбой с ошибкой Illegal Access при выполнении конструктора.

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

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

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

  • 3
    Добро пожаловать на ТАК. Лучший совет, который я могу вам дать, это попытаться отладить ваше приложение и посмотреть, какая линия вызывает проблему. Используйте точки останова и шаг за шагом. У нас нет всего кода здесь, и то, что вы показываете, не похоже на источник проблемы. Еще одно замечание: вы выделяете память новой, но не освобождаете ее, что вызывает утечку памяти.
  • 0
    пожалуйста, предоставьте правильный код MyClass obj1 = new MyClass (); это, вероятно, не то, что вы написали. Для чего нужен cHapticDeviceHandler?
Показать ещё 6 комментариев
Теги:
illegalaccessexception

2 ответа

0

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

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

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

  • 0
    Если я делаю что-то вроде ... MyClass obj1 = new MyClass () и затем я удаляю объект с помощью delete obj1, проблема по-прежнему возникает при использовании MyClass obj2 = new MyClass (). Разве это не значит, что это не проблема?
  • 0
    @ user3260442 MyClass не имеет деструктора и не удаляет cHapticDeviceHandler при удалении. Так что их еще двое.
Показать ещё 1 комментарий
0

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

  • 0
    Это могло быть возможно, хотя я не видел упоминаний об этом в документации .
  • 0
    MyClass* obj1 = new MyClass(); delete obj1; MyClass* obj2 = new MyClass() также завершится ошибкой. Это не должно быть сбой после удаления obj1, если это так, не так ли?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню