Инструкция на «<address>» ссылается на память на «<address>». Память не может быть «прочитана». - PullRequest
2 голосов
/ 21 апреля 2009

Приложение c / c ++ выдает эту ошибку, как начать отладку (лучшая идея, чем добавление операторов печати)?

Ответы [ 6 ]

6 голосов
/ 21 апреля 2009

Является ли второй адрес очень маленьким числом, например 0x00000001 или 0x00000000? Если это так, вы, вероятно, просто забыли инициализировать указатель.

В любом случае применяются стандартные приемы отладки: начните изолировать проблему, заметив, когда это произойдет, и сузив все оттуда.

2 голосов
/ 22 апреля 2009

Как уже говорили другие, если это воспроизводимо на вашей машине разработки, запустите отладчик и либо установите точки останова / пошагово пройдитесь по коду.

Однако, если это происходит на компьютере клиента и отладчик недоступен, вы можете получить ту же информацию (callstack, регистры и т. Д.), Используя SetUnhandledExceptionFilter и записав информацию в файл журнала, или делать мини-дамп. Я подозреваю, что callstack будет наиболее полезным начальным местом, поэтому вы можете использовать одну из функций StackWalk в обработчике и записывать в файл журнала. Для этого требуется как минимум файл карты или набор символов (PDB) для этой сборки приложения.

2 голосов
/ 21 апреля 2009

Сообщение об ошибке говорит о том, что вы разрабатываете с Visual Studio. Ну, по крайней мере, это единственная среда разработки, где я видел это сообщение об ошибке в этой формулировке.

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

Чтобы сделать это в VC ++ 2003, который у меня сейчас открыт, перейдите в раздел «Отладка-> Исключения», откройте «Исключения Win32», нажмите «c0000005 Access Violation» и установите «При возникновении исключения» значение «Взлом отладчик».

1 голос
/ 21 апреля 2009

В зависимости от вашей среды разработки, файл карты для вашей программы может помочь

1 голос
/ 21 апреля 2009

Трудно предложить что-либо, без кода. Попробуйте использовать отладчик и установить точки останова в своем коде непосредственно перед тем, как столкнуться с проблемой.

0 голосов
/ 22 апреля 2009

Вы можете использовать GDB для отладки вашего приложения: http://www.gnu.org/software/gdb/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...