Зарезервирована ли память?
От: Sigmov  
Дата: 09.12.08 10:00
Оценка:
Имеется некоторый адресс.
(void*)P;
Нужно узнать, зарезервирован ли данный бит в памяти под что-либо?
Re: Зарезервирована ли память?
От: Sergej Pupykin  
Дата: 09.12.08 10:09
Оценка:
Sigmov wrote:
> Имеется некоторый адресс.
> (void*)P;
> Нужно узнать, зарезервирован ли данный бит в памяти под что-либо?

В общем случае — попробовать прочитать/записать — если не упадет, значит
все нормально

А так можно посмотреть на (пошаманить с) текущую позицию sbrk(), размер
стека, на адрес с которого начинается память ядра...

Конкретнее — в зависимости от ОС.

Но в любом случае будет через жопу...
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Зарезервирована ли память?
От: Аноним  
Дата: 09.12.08 11:36
Оценка: :)))
Здравствуйте, Sergej Pupykin, Вы писали:

SP>Sigmov wrote:

>> Имеется некоторый адресс.
>> (void*)P;
>> Нужно узнать, зарезервирован ли данный бит в памяти под что-либо?

SP>В общем случае — попробовать прочитать/записать — если не упадет, значит

SP>все нормально

SP>А так можно посмотреть на (пошаманить с) текущую позицию sbrk(), размер

SP>стека, на адрес с которого начинается память ядра...

SP>Конкретнее — в зависимости от ОС.


SP>Но в любом случае будет через жопу...


Все гораздо проще, все биты в памяти зарезервированы для использования в байтах
Re: Зарезервирована ли память?
От: cencio Украина http://ua-coder.blogspot.com
Дата: 09.12.08 11:41
Оценка:
Здравствуйте, Sigmov, Вы писали:

S>Имеется некоторый адресс.

S>(void*)P;
S>Нужно узнать, зарезервирован ли данный бит в памяти под что-либо?

не бит, а минимум байт
и что означает "резервировать"? просто так на физические адреса зарезервированые для устройств ты не попадеш.
Re: Зарезервирована ли память?
От: TheBeard Россия  
Дата: 09.12.08 11:48
Оценка:
S>Имеется некоторый адресс.
S>(void*)P;
S>Нужно узнать, зарезервирован ли данный бит в памяти под что-либо?

Не знаю, что Вы имеете в виду под "зарезервирован". Проверить диапазон адресов на возможность чтения/записи в Windows можно с помощью функций IsBadReadPtr() и IsBadWritePtr() (подробности в MSDN).
Re[2]: Зарезервирована ли память?
От: Sigmov  
Дата: 09.12.08 11:55
Оценка:
Здравствуйте, cencio, Вы писали:
C>не бит, а минимум байт
Совершенно верно. Я описался.
C>и что означает "резервировать"? просто так на физические адреса зарезервированые для устройств ты не попадеш.
Нужно узнать, был ли этот бит ранее выделен под какой либо объект.
Или же в нем никакой нужной информации.
Re[2]: Зарезервирована ли память?
От: cencio Украина http://ua-coder.blogspot.com
Дата: 09.12.08 12:18
Оценка:
Здравствуйте, TheBeard, Вы писали:

S>>Имеется некоторый адресс.

S>>(void*)P;
S>>Нужно узнать, зарезервирован ли данный бит в памяти под что-либо?

TB>Не знаю, что Вы имеете в виду под "зарезервирован". Проверить диапазон адресов на возможность чтения/записи в Windows можно с помощью функций IsBadReadPtr() и IsBadWritePtr() (подробности в MSDN).


загляните в мсдн, и посмотрите что про эти ф-ции там написано

...IsBadXxxPtr should really be called CrashProgramRandomly

Re[3]: Зарезервирована ли память?
От: AKh  
Дата: 09.12.08 12:19
Оценка:
Здравствуйте, Sigmov, Вы писали:

S>Нужно узнать, был ли этот бит ранее выделен под какой либо объект.

S>Или же в нем никакой нужной информации.

Защищаешься от расстрела памяти?

Никаких общих методов не существует. Увы, но придется отлаживать программу последовательно.
Re[3]: Зарезервирована ли память?
От: Аноним  
Дата: 09.12.08 12:22
Оценка:
Здравствуйте, Sigmov, Вы писали:

S>Здравствуйте, cencio, Вы писали:

C>>не бит, а минимум байт
S>Совершенно верно. Я описался.
C>>и что означает "резервировать"? просто так на физические адреса зарезервированые для устройств ты не попадеш.
S>Нужно узнать, был ли этот бит ранее выделен под какой либо объект.
S>Или же в нем никакой нужной информации.

дважды описался

два потока, один выделяет(резервирует) память и тут же ее освобождает, второй делает проверку был ли выделен вон тот БАЙТ вот по вон тому адресу (void*). Какой потаенный смысл вам это знать, если через мгновение ситуация изменится?
Re[3]: Зарезервирована ли память?
От: cencio Украина http://ua-coder.blogspot.com
Дата: 09.12.08 12:30
Оценка:
Здравствуйте, Sigmov, Вы писали:

S>Здравствуйте, cencio, Вы писали:

C>>не бит, а минимум байт
S>Совершенно верно. Я описался.
C>>и что означает "резервировать"? просто так на физические адреса зарезервированые для устройств ты не попадеш.
S>Нужно узнать, был ли этот бит ранее выделен под какой либо объект.
S>Или же в нем никакой нужной информации.

а зачем?
программу такие вещи в принципе не должны волновать, работать нужно по принципу — выделил память, попользовал ее и освободил. код проверяющий указатель на валидность/мусор не к чему хорошему не приведет.

впрочем дебажные версии под виндой забивають инициализированую память, но еще не использованую память определеными значениями (не помню их, посмотри под дебагером), способ конечно не хороший и не надежный. но возможно подойдет. Но лучше подумать почему возникла подобная потребность и передизайнить.
Re: Зарезервирована ли память?
От: Аноним  
Дата: 09.12.08 12:35
Оценка:
S>Имеется некоторый адресс.
S>(void*)P;
S>Нужно узнать, зарезервирован ли данный бит в памяти под что-либо?
У бита нет атрибута "зарезервирован" у него есть только значение. 0 или 1.
Re[3]: Зарезервирована ли память?
От: fay Украина www.bekhter.net
Дата: 10.12.08 17:34
Оценка:
Здравствуйте, cencio, Вы писали:

C>Здравствуйте, TheBeard, Вы писали:


S>>>Имеется некоторый адресс.

S>>>(void*)P;
S>>>Нужно узнать, зарезервирован ли данный бит в памяти под что-либо?

TB>>Не знаю, что Вы имеете в виду под "зарезервирован". Проверить диапазон адресов на возможность чтения/записи в Windows можно с помощью функций IsBadReadPtr() и IsBadWritePtr() (подробности в MSDN).


C>загляните в мсдн, и посмотрите что про эти ф-ции там написано


C>

C>...IsBadXxxPtr should really be called CrashProgramRandomly


Там еще веселее написано

Important This function is obsolete and should not be used. Despite its name, it does not guarantee that the pointer is valid or that the memory pointed to is safe to use.

Best regards,
Oleg Bekhter
Software Developer
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.