Я пытаюсь переделать инженер и исправить консольное приложение Win32, которое бросает необработанное исключение.Почему переменная класса C++ неожиданно меняет внешний вид?
У меня есть 32 экземпляра класса, работающего в потоках. Эти потоки «Служба» должны каждый раз создавать/удалять уникальный экземпляр CMessage, и каждый из этих объектов CMessage объявляется приватным в классе Service.
Когда я запускаю приложение в отладчике (я использую Visual Studio 2005), окно просмотра для CMessage указывает, что прямо перед тем, как функция члена CMessage вызывается, адрес изменений CMessage на 0x00000000 - причина исключения ,
Нет простого объяснения, которое я могу понять, почему это происходит. Кажется, что между предыдущей строкой кода и этим нет ничего неблагоприятного, поэтому мое подозрение состоит в том, что каким-то образом каждый поток ошибочно ссылается на объект CMessage из одного из других потоков в некоторых случаях (так как в какой-то момент во время жизни потоков CMessage объект для этого потока удаляется).
Мой вопрос: Каков наилучший способ убедиться, что эти объекты CMessage являются абсолютно безопасными потоками и не могут быть изменены/удалены из любого места, кроме текущего класса? Я думал, что это то, что было частным, но я не совсем уверен сейчас. Одна вещь, я думал о выполнении имел в виду объект CMessage следующим образом:
this->myCMessage;
, а не просто:
myCMessage;
ли это сделать разницу?
Нет. Более вероятно, что вы вызываете некоторую функцию, которая не является потокобезопасной. – stark