2013-08-16 2 views
0

Я пытаюсь отладить проект на MSVS 2010. Реализация - C++; когда я обманываю исходный код, я получаю следующий отказ от MSVS.Доступ к местоположению чтения voilla

Отказ сообщил:

"First chance exception at 0x00000013fb5b9ee in unit.exe: 0xc00000005 access voilation reading location 0x00000000000000c." 

проблема заключается в получении адреса.

int base = (*(abc::g_runc1.m_paulsenderpin.m_lastchunk_p)).xcpp::cxcppoutput::m_baseaddress; 

мой проект очень большой, чтобы включать в себя исходный код,

Вкратце это можно описать как: - Пол представляет собой модуль с отправителем штифтом, подключенного к c1. - xcpp - это интерфейс

Этот исходный код и проект верны и работают без сбоев на компиляторе ARM, но на MSVS он дает ошибку нарушения прав доступа. В msdn есть несколько сообщений о разрешении, устанавливаемом сборкой, и который позволяет читать адресное местоположение. если да, то как его изменить ...? или есть ли лучший вариант, чтобы найти проблему ...?

Любая помощь приветствуется.

+0

Что такое 'abc :: g_runc1.m_paulsenderpin.m_lastchunk_p'? Как это объявлено? Если это указатель, вы проверяете, что это не 'NULL'? –

+0

abc :: g_runc1.m_paulsenderpin.m_lastchunk_p = 0x00000000000 paulsenderpin struct {pinbase, m_currentchunk, m_lastchunk, ....}. память распределяется на paul для вывода отправителя, memblock 1024 байта. Дополнительно к этому, есть 8 таких контактов, paul, polly, raul, ..... baseaddress всех, кроме paul, угасают одинаково и не имеет ошибки памяти. только paul имеет эту проблему везде, где она используется. и MSVS выбрасывает для него исключение, но ARM не делает этого. –

+0

Если это ноль, значит, это 'NULL', и это, как правило, незаконный адрес. –

ответ

0

Проблема заключается в адресации памяти, в отладчике ARM 32 бит и 48 бит адресации MSVS10, из-за чего байт MSB теряется и поэтому не может найти правильный адрес памяти ... !!!

0

Ваш код пытается получить доступ к местоположению, которое фактически не принадлежит его процессу. Никакие данные пользовательских приложений не могут быть расположены по адресам, близким к нулю. Поскольку ваши выражения слишком длинны, чтобы просто найти, где находится элемент, содержащий нулевую ссылку, мой совет равен m_last chunk_p, а m_baseaddress представляется членом на смещении 12.

Существует одно простое объяснение, почему ваш код работает нормально, когда он скомпилированный с помощью чего-то, что работает с ARM: ARM использует выровненный доступ к памяти, поэтому члены класса и структуры привязаны к полному блоку, хотя они не всегда используют выделенное для них пространство. Поэтому вы используете более высокий указатель или неправильный параметр memset где-то в вашем коде, и ваш указатель перезаписывается.

Проблема может также исчезнуть, если вы скомпилируете ее с другой версией (возможно, другого) компилятора (или не машины с разной архитектурой процессора 32/64), поскольку размер основных типов не всегда одинаковый.

Вы должны попытаться проверить то, что указало на самом деле ноль (или, возможно, 12) в вашем выражении, и попытаться установить на него часы. Убедитесь, что вы правильно используете sizeof.

+0

При инициализации m_lastchunk = 0x00000000; и не изменяется вообще, что приводит к необработанному исключению. эта ошибка находится на самой ранней стадии, перед фактической работой функции, едва при инициализации. –

+0

Итак, нет ничего плохого, поскольку вы просто забыли установить его значение. У вас осталось два варианта: вы можете инициализировать этот элемент до того, как он будет доступен, или вы можете использовать «интеллектуальный прокси» для распределения данных только тогда, когда он будет доступен и не будет выделен. – user35443

+0

Я попытался инициализировать его, прежде всего, это не сработает, и исходный код должен быть общим исходным кодом для ARM/MSVS. и у меня есть ограничение на изменение источника для контактов, c1 и xcpp, поскольку я использую структуры и определяет из этих исходных кодов, сгенерированных. Предоставляет ли MSVS любую альтернативу ...? Я знаю его немой, чтобы спросить, но из-за ограничений у меня ограниченный объем модификаций. –

Смежные вопросы