Результат приложений, затронутых другим запущенным приложением

Это продолжение моего предыдущего вопроса, хотя речь идет о другом.

У меня возникла проблема, когда по какой-то причине в моем сообщении о том, что я передаю от одного процесса к другому, отображается только первая буква, в данном случае «M».

Мое приложение основано на образце MSDN поэтому, чтобы убедиться, что я что-то не пропустил, я создаю отдельное решение, добавляю образец MSDN (без каких-либо изменений для моих нужд), и неудивительно, что он работает нормально.

Теперь о странности: когда я запускаю образец MSDN (как при отладке) и запускаю собственное приложение, текст выводится нормально без каких-либо проблем. Во второй раз, когда я запустил свой самостоятельно, без открытого исходного образца MSDN, он не работает и показывает только "M".

Я заглянул в отладчик и, похоже, не заметил ничего подозрительного (картинка немного устарела, несоответствие типов данных я исправил).

Информация об отладчике

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

Спасибо за любую помощь.

Изменить:

После дальнейшего расследования кажется, что мое собственное приложение каким-то образом случайно читает память других приложений. Если я «опрашиваю» сообщение, даже не отправляя его через окно производителя, он все равно получает сообщение, которое должно означать, что оно читает его из другого (MSDN) процесса, это также объясняет, почему оно работает правильно только при запуске MSDN. образец сначала.

Я до сих пор не понимаю, почему это происходит, как это остановить и как исправить, это, наверное, самая странная вещь, с которой я столкнулся.

****Решение:****

Хотя это не решает проблему взаимного влияния обоих приложений, мне удалось исправить проблему с текстом. Я не добавил необходимый #include в оба файла, добавив это исправило без каких-либо предупреждений.

Это всегда мелочи.


person Jamie Keeling    schedule 17.04.2010    source источник
comment
Один процесс не может читать память другого; они существуют в разных пространствах виртуальной памяти, так что гипотеза неправдоподобна. Более вероятно, что у вас недетерминированная ошибка, поведение которой зависит от значения некоторых неинициализированных данных или данных, на которые ссылается недействительный указатель. Эти значения будут зависеть от среды памяти при запуске, и, влияя на среду, код может работать в другой области физической памяти и, таким образом, работать с разными значениями. Вы можете обнаружить, что по той же причине поведение отличается за пределами среды отладчика.   -  person Clifford    schedule 18.04.2010


Ответы (1)


Взгляните на pBuf в окне "просмотра памяти". Средство просмотра строк завершится первым нулевым ограничителем, но то, что находится за его пределами, может быть интересным / полезным или дать подсказку.

person Clifford    schedule 17.04.2010
comment
Очевидно, моя версия IDE не включает его, отлично. msdn.microsoft.com/en-us/library/5d2www5s.aspx - person Jamie Keeling; 18.04.2010
comment
Я пометил это как ответ, хотя я не мог использовать его, я уверен, что это помогло бы мне, несмотря ни на что, спасибо за ваше время, Клиффорд. - person Jamie Keeling; 18.04.2010
comment
@Jamie Keeling: У меня это работает в VC ++ 2008 Express точно так, как описано на этой странице, я не пробовал в бета-версии 2010, к которой, возможно, относится эта страница. Если это так; веская причина не обновляться! Просто введите pBuf в качестве данных, которые вы хотите наблюдать. В противном случае добавьте отдельные часы для pBuf[0], pBuf[1], pBuf[2], ... и т. Д. - person Clifford; 18.04.2010