Attempted to read or write protected memory. This is often a
От: hooky-mars  
Дата: 10.06.10 06:49
Оценка:
Всем привет!

Моя задача отлавливает ошибку:Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Но ведь место где она ее отлавливает — не место ошибки, а место ее проявления.
Существуют ли какието методики, средства для поиска таких ошибок?
Ситуация осложняется тем, что отлавливатеся ошибка спонтанно.

P.S. Использую смешанный код. C++/CLI
Re: Attempted to read or write protected memory. This is oft
От: Acteon  
Дата: 10.06.10 07:24
Оценка:
Здравствуйте, hooky-mars, Вы писали:

HM>Всем привет!


HM>Моя задача отлавливает ошибку:Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

HM>Но ведь место где она ее отлавливает — не место ошибки, а место ее проявления.
HM>Существуют ли какието методики, средства для поиска таких ошибок?
HM>Ситуация осложняется тем, что отлавливатеся ошибка спонтанно.

HM>P.S. Использую смешанный код. C++/CLI


Есть замечательная но стоящая денег тулза BoundChecker здесь.

Также стандартная библиотека имеет возможности по диагностированию проблем работы с памятью здесь.

Но в твоем случае, если это твой код сбоит, ты где-то напутал с адресами. Попробуй раскрутить стек, и внимательно изучить все операции выполняемые с памятью.
Re[2]: Attempted to read or write protected memory. This is
От: hooky-mars  
Дата: 10.06.10 07:46
Оценка:
A>Но в твоем случае, если это твой код сбоит, ты где-то напутал с адресами. Попробуй раскрутить стек, и внимательно изучить все операции выполняемые с памятью.
Стек раскрутить не получится, так как код смешанный.
Re[3]: Attempted to read or write protected memory. This is
От: Acteon  
Дата: 10.06.10 08:09
Оценка:
Здравствуйте, hooky-mars, Вы писали:

A>>Но в твоем случае, если это твой код сбоит, ты где-то напутал с адресами. Попробуй раскрутить стек, и внимательно изучить все операции выполняемые с памятью.

HM>Стек раскрутить не получится, так как код смешанный.

Кстати, если код смешанный, возможно вмешивается сборщик мусора, и делает указатели не действительными.
Re[4]: Attempted to read or write protected memory. This is
От: hooky-mars  
Дата: 10.06.10 09:03
Оценка:
A>Кстати, если код смешанный, возможно вмешивается сборщик мусора, и делает указатели не действительными.
ИМХО, это домыслы
Re[5]: Attempted to read or write protected memory. This is
От: Acteon  
Дата: 10.06.10 09:43
Оценка:
Здравствуйте, hooky-mars, Вы писали:

A>>Кстати, если код смешанный, возможно вмешивается сборщик мусора, и делает указатели не действительными.

HM>ИМХО, это домыслы

То что в смешанном коде сборщик мусора может может повредить память — это факт. Могу даже объяснить почему, если не веришь. А произошло ли это у тебя, конечно домыслы. Такую ошибку можно получить очень многими способами.
Re[6]: Attempted to read or write protected memory. This is
От: hooky-mars  
Дата: 10.06.10 12:09
Оценка:
Просто я считаю сборщик мусора достаточно умной штукой чтобы она не лезна в неуправляемую память.
Разве что, если (как кимто образом) я попорчу ссылки у мусорщика, ну дык какая разница?

A>То что в смешанном коде сборщик мусора может может повредить память — это факт. Могу даже объяснить почему, если не веришь. А произошло ли это у тебя, конечно домыслы. Такую ошибку можно получить очень многими способами.

Было бы интересно почитать Ваше объяснение...

Ведь это просиходит не с самого начала, а после какогото изменения модуля....
У меня несколько раз возникали подозрения на мусорщик, но каждый раз оказывалось, что это была моя вина.
Так что придпочитаю домать, что ошибка всеже моя
Re[7]: Attempted to read or write protected memory. This is
От: Acteon  
Дата: 10.06.10 13:09
Оценка:
Здравствуйте, hooky-mars, Вы писали:

HM>Просто я считаю сборщик мусора достаточно умной штукой чтобы она не лезна в неуправляемую память.

HM>Разве что, если (как кимто образом) я попорчу ссылки у мусорщика, ну дык какая разница?

A>>То что в смешанном коде сборщик мусора может может повредить память — это факт. Могу даже объяснить почему, если не веришь. А произошло ли это у тебя, конечно домыслы. Такую ошибку можно получить очень многими способами.

HM>Было бы интересно почитать Ваше объяснение...

HM>Ведь это просиходит не с самого начала, а после какогото изменения модуля....

HM>У меня несколько раз возникали подозрения на мусорщик, но каждый раз оказывалось, что это была моя вина.
HM>Так что придпочитаю домать, что ошибка всеже моя

Да, он в не управляемую память не лезет. Но возможен такой сценарий. Вы выделяете память в управляемом коде (Ref1). Дальше указатель на эту память передаете модулю написанному на неуправляемом языке (Ptr1). Потом сборщик мусора решает почистить немного память и перераспределить ее. Т.е. ссылка Ref1 уже будет указывать на Ptr2. Управляемый код с этой памятью будет работать абсолютно нормально. А вот Ptr1 теперь указывает непонятно на что. И попытка доступа к этому участку памяти из неуправляемого кода может вызвать ошибку. В C# есть синтаксис для фиксации таких участков памяти. Но я не спец в C#, поэтому волшебное слово подсказать не смогу.
Re[8]: Attempted to read or write protected memory. This is
От: hooky-mars  
Дата: 11.06.10 03:50
Оценка:
A>Да, он в не управляемую память не лезет. Но возможен такой сценарий. Вы выделяете память в управляемом коде (Ref1). Дальше указатель на эту память передаете модулю написанному на неуправляемом языке (Ptr1). Потом сборщик мусора решает почистить немного память и перераспределить ее. Т.е. ссылка Ref1 уже будет указывать на Ptr2. Управляемый код с этой памятью будет работать абсолютно нормально. А вот Ptr1 теперь указывает непонятно на что. И попытка доступа к этому участку памяти из неуправляемого кода может вызвать ошибку. В C# есть синтаксис для фиксации таких участков памяти. Но я не спец в C#, поэтому волшебное слово подсказать не смогу.

О такой ситуации я вкурсе. А волшебное слово так и есть fixed, токмо оно работает в приделах метода, т.е. обявляется:
fixed (чаго то фиксим)
{
Чаго то делаем
}

Но в С++/CLI ситуация другая. Спасибо за мысль! Порою в этом направлении.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.