| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > Как узнать принадлежит ли область памяти программе |
| Автор: KaraKum 24.7.2009, 10:59 |
| Доброе время суток. Есть ли возможность узнать принадлежит ли память программе по имеющемуся указателю? |
| Автор: xvr 24.7.2009, 11:33 |
| Можно. Поставить ловушку на SEGV и прочесть память по указателю. Если сигнала не последовало - то принадлежит |
| Автор: azesmcar 24.7.2009, 11:37 |
| Зачем это нужно если не секрет? |
| Автор: KaraKum 24.7.2009, 12:57 |
| Для отладки иногда нужно узнать при использовании какого указателя возникает "segmentation fault". |
| Автор: azesmcar 24.7.2009, 12:59 |
| Ну вариант xvr подходит. А вообще - дебагером не лучше? |
| Автор: xvr 27.7.2009, 12:00 | ||||
Вроде как 'метаданные аллокатора' тоже принадлежат 'программе', так что условия исходного вопроса выполняются. Если хочется большего - можно прилинковать к себе valgrind и спрашивать у него (только не спрашивайте у меня - как |
| Автор: MAKCim 27.7.2009, 13:30 |
программа - это то, что передается в execve аллокатор - это libc. т. е не программа |
| Автор: xvr 27.7.2009, 13:43 | ||
Ааа, в этом смысле |
| Автор: KaraKum 29.7.2009, 00:18 |
| Ведь для каждого работающего приложения есть таблица, описывающая участки памяти, которые принадлежат программе. Должен быть способ как-то эту таблицу прочитать. Например в valgrind в конце проверки сообщается о том сколько памяти "окончательно потеряно", сколько "possibly lost" и так далее - вероятно он эту таблицу и читает и сверяет с имеющимися в программе указателями. Я правильно понимаю? |
| Автор: xvr 29.7.2009, 11:39 | ||||||
Есть такая таблица
|
| Автор: KaraKum 29.7.2009, 11:59 | ||||
maps - это файл? У меня он почему-то пустой. |
| Автор: xvr 30.7.2009, 11:24 | ||||||||||
Файл
|
| Автор: KaraKum 30.7.2009, 13:39 |
| |