![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| GIK |
|
||||||
![]() Добрый человек ![]() ![]() Профиль Группа: Участник Сообщений: 985 Регистрация: 3.6.2005 Где: я только не небыв ал Репутация: 1 Всего: 14 |
Народ, привет
Вобщем прочитал я пару статей про виндовую адресацию памяти, теперь интересует следующее: Компилятор не дает значение данных хранимых, к примеру, в виртуальной области от 0x00000000 до 0x0000FFFF Если я создаю указатель, то он ссылается на первый байт, но значение от этого указателя нельзя получить и присвоить соответсятвенно тоже. Как можно сделать так, чтобы доступ открылся?
Добавлено @ 23:12 Да, еще, чуть не забыл
Очень интересно наблюдать, когда выкидывает одинаковые числа
-------------------- Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!! Программирование - это не деятельнось! Программирование - это состояние души! Бог - самый крутой программист. |
||||||
|
|||||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
По поводу первого участка:
А почему вы решили, что значение указателя g должно указывать на 1-й байт виртуальной памяти? Откуда такие утверждения? Вы просто видите значение переменной типа "указатель", которая НИЧЕМ не проинициализирована... Это сообщение отредактировал(а) Anikmar - 6.2.2007, 23:18 |
|||
|
||||
| GIK |
|
|||
![]() Добрый человек ![]() ![]() Профиль Группа: Участник Сообщений: 985 Регистрация: 3.6.2005 Где: я только не небыв ал Репутация: 1 Всего: 14 |
Куда указывает указатель? Не на память с адресом в один байт?
-------------------- Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!! Программирование - это не деятельнось! Программирование - это состояние души! Бог - самый крутой программист. |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Он никуда не указывает! Это просто указатель. Чтобы он на что-то указывал ему нужно присвоить какое-нибудь значение. А так - все зависит от компилятора. В билдере, насколько я помню, указатель инициализируется значениме чуть больше нуля. Но не факт и в стандарте не прописано (насколько я знаю).
|
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Romikgy, и?
Не врубился... |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
я привел пример где указатель указывает на 4 бафта -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
И опять неправильно. С чего это следует? Пока он не инициализирован он никуда не указывает. Он МОЖЕТ указывать на память из 4-х байт (вернее на long). А если взять конструкцию:
pLong и pChar имеют одно и тоже значение? И на какой участок памяти они указывают? |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
да неправильно высказался
так правильно? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| GIK |
|
|||
![]() Добрый человек ![]() ![]() Профиль Группа: Участник Сообщений: 985 Регистрация: 3.6.2005 Где: я только не небыв ал Репутация: 1 Всего: 14 |
Мне кажется в любом случае, если есть значение у указателя, значет оно, хотябы косвенно, куда то указывает.... Разве я не прав?
Почему тогда нельзя взять данные из области с адресом 1? Или вообще нельзя брать данные, из неинициализированного указаьеля? -------------------- Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!! Программирование - это не деятельнось! Программирование - это состояние души! Бог - самый крутой программист. |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
смотря что в нем срабатывает имхо защита на доступ в системную область -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Нет, это не так. Поцессу выделено его адрессное пространство, но память разделена на блоки. И каждый блок должен быть выделен менеджером памяти. Если указателю присвоить произвольное значение, то это далеко не всегда попадает в распределенное пространоство для процесса. В MSDOS так можно было - пробежаться по выделенным блокам, да и в любое место залесть было можно. Но стандартом Си++ это уже никак не определено - память должна выделяться в нужном объеме и освобождаться после. Произвольные адреса не допускаются. |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
нельзя, и нормальный компилятор будет на это ругаться.. |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Интерес чисто познавательный, а каким образом он будет ругаться? Я думал, что все что он скажет - это предупреждение "Возможное использование переменной до ее инициализации". (зачастую оно по умолчанию выключено) Или я чего-то не знаю? |
|||
|
||||
| SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 15 Всего: 124 |
![]() А. В. Коберниченко — Недокументированные возможности Windows NT В этой книге рассказано и есть пример. Советую найти (1998 год издания) и купить. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |