![]() |
|
Модераторы: bsa |
![]()
|
|
| lavan |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 21.4.2011 Репутация: нет Всего: нет |
Народ,подскажите кто знает.Разбираюсь с фун VirtualAlloc();Работа с участком памяти
расспределенным этой функцией в принципе похожа на работу с участком памяти полученным фун new?Т.е распределил память под int поместить могу туда только значения int? И еще,распределяю память под массив строк
|
|||
|
||||
| Estranged |
|
||||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 30.8.2010 Репутация: нет Всего: 3 |
Вы же не пишете в память, куда указывает ptr_toarray, а присваиваете в ptr_toarray новый адрес - адрес mas:
Если непонятно: Вы не записали по адресу ptr_toarray содержимое, просто изменили сам указатель ptr_toarray. Это зависит от того, как компилятор разместит в стеке mas и mas2.
Он стал 0x20 (32 в десятичной), потому что это арифметика указателей такая. ptr_toarray - указатель на указатель. Он может адресовать только указатели, которые в данном случае занимают 4 байта. А прибавить 8 раз по 4 байта как раз и выходит 32 байта - вы задаете смещение НЕ в байтах, а в количествах элементов того типа, на который заведен указатель - указатель на указатель. Т.е. это ptr_toarray [8] - обращение к 8-му указателю. Добавлено через 14 минут и 3 секунды upd.
да
Нет, туда можно писать что угодно. Только к нужному типу надо приводить адрес, возвращаемый VirtualAlloc:
Это сообщение отредактировал(а) Estranged - 24.9.2011, 23:51 |
||||||||||
|
|||||||||||
| lavan |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 21.4.2011 Репутация: нет Всего: нет |
секунду,знак = копирует данные находящиеся по адресу правого опперанда в
ячейку памяти левого опереанда т.е
копирую значение находящееся по адресу mas в ячейку по адресу ptr_toarray в моем случае mas-это указатель на указатель значит я копирую в ячейку с адресом ptr_toarray значение находящееся по адресу mas которое является указателем на массив указателей.а никак не меняю адрес ptr_toarray.Разве нет!? кроме того смотрю адресс mas 004070В6 а после
адрес ptr_toarray 12ff3c |
||||
|
|||||
| Estranged |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 30.8.2010 Репутация: нет Всего: 3 |
Почти верно в данном случае. Здесь Вы копируете не содержимое по адресу mas, а адрес самого mas. Чтобы это понять, надо взглянуть на дизассемблерный код:
Смотрите, инструкция lea ("load effective address") - это инструкция загрузки адреса - загрузить адрес mas в регистр rax. mov делает запись в адрес, где размещен ptr_toarray. Квадратные скобки - писать в адрес ptr_toarray. Повторяю, не по адресу, который содержит ptr_toarray, а в по адресу самой переменной ptr_toarray. Вы переустанавливаете указатель ptr_toarray на новый адрес. Знаете ли Вы оператор разыменования указателя? А теперь сравните, что делает оператор разыменования в С - звездочка (*):
Вы путаете адрес самого указателя с адресом, который этот же указатель хранит. Т.е. не знаете, как работать с указателями. Даже тему переместили. Это сообщение отредактировал(а) Estranged - 25.9.2011, 20:30 |
||||||
|
|||||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Наличие слова VirtutalAlloc еще не является признаком 'Системного программирования'. А уж удивление ТС по поводу того, что оператор присваивания действительно таки присваивает, явно указывает нато, что автор ошибся с разделом.
Модератор: Тему перенес |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
lavan, бегом читать прикрепленную тему "ответы на часто задаваемые вопросы", в частности "указатели и ссылки". СРОЧНО!
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |