Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
8 / 8 / 4
Регистрация: 14.05.2010
Сообщений: 133
1

VirtualAlloc и размеры

15.12.2016, 21:04. Показов 1708. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Друзья возник вопрос, кто обладает информацией, пожалуйста, поделитесь, в MSDN по этому поводу ничего не нашел.
Проблема такая.

Выделяю память:
C++
1
2
size_t size = 4;
int* virtualAlloc = (int*)VirtualAlloc( NULL, 2500 * size, бла-бла, бла-бла);
пытаюсь изменить уровень доступа к участку памяти (РАБОТАЕТ):
C++
1
VirtualAlloc(VirtualAlloc + (500 * size), size, бла-бла, новое значение)
Но вот если попытаюсь сдвинуться дальше в памяти, например (НЕ РАБОТАЕТ)
C++
1
VirtualAlloc(VirtualAlloc + (1000 * size), size, бла-бла, новое значение)
Получаю ошибку 487 - Attempt to access invalid address.

Как так, ведь я не вышел за границы выделенной памяти???
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.12.2016, 21:04
Ответы с готовыми решениями:

VirtualAlloc
Народ,подскажите кто знает.Разбираюсь с фун VirtualAlloc();Работа с участком памяти...

VirtualAlloc и VirtualProtect?
VirtualAlloc и VirtualProtect что из себя представляют даные функцыи,как с ними работать и что они...

VirtualAlloc + ReadFile
Пользуюсь masm32 и функциями WINAPI. Хочу подгрузить файл в память выделенную с помощью...

VirtualAlloc + ReadFile
INVOKE CreateFile,OFFSET fname, GENERIC_READ, NULL, NULL, OPEN_EXISTING, NULL,NULL mov HWNDFILE,...

4
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
15.12.2016, 22:22 2
А что такое
Цитата Сообщение от kolya8920 Посмотреть сообщение
VirtualAlloc + (1000 * size)
?

Это адрес функции VirtualAlloc + 4000 байт (или 8000 на x64).
Откуда ты знаешь, что лежит по этому адресу?
0
8 / 8 / 4
Регистрация: 14.05.2010
Сообщений: 133
15.12.2016, 22:59  [ТС] 3
Я же зарезервировал это пространство вызовом
C++
1
2
size_t size = 4;
int* virtualAlloc = (int*)VirtualAlloc( NULL, 2500 * size, бла-бла, бла-бла);
от NULL(задается системой) до 2500 * 4 = 10000 (округляется), возвращается указатель на начало этого пространства, вот я его и плюсую.

sorry там я опечатался:

C++
1
VirtualAlloc(virtualAlloc + (1000 * size), size, бла-бла, новое значение)
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
16.12.2016, 08:18 4
Лучший ответ Сообщение было отмечено kolya8920 как решение

Решение

'virtualAlloc' - это указатель на int. Тут действует арифметика указателей.
Выражение 'virtualAlloc + (1000 * size)' увеличивает virtualAlloc не на 4000, а на '4000*sizeof(int)'.
1
8 / 8 / 4
Регистрация: 14.05.2010
Сообщений: 133
16.12.2016, 18:39  [ТС] 5
Спасибо. На будущее учту
0
16.12.2016, 18:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2016, 18:39
Помогаю со студенческими работами здесь

Работа с VirtualAlloc
ребята, здравствуйте, очень нужна ваша помощь:) мне необходимо в учебных целях зарезервировать...

Утечка памяти VirtualAlloc()
Всем привет! Есть функция, которая совершает очень большое количество повторений и выделяет при...

Задача на функцию VirtualAlloc()
Доброго времени суток, уважаемые форумчане. Нужна Ваша помощь, я в программировании новичок и не...

Заданы размеры прямоугольного отверстия и размеры кирпича. Определить, пройдет ли кирпич в отверстие
Заданы размеры прямоугольного отверстия A,B и размеры кирпича X,Y,Z. Определить, пройдет ли кирпич...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru