eXeL@B —› Программирование —› Работа с замапллеными в память файлами |
Посл.ответ | Сообщение |
|
Создано: 06 декабря 2008 23:43 · Личное сообщение · #1 Вопрос глупый, может это сказывается 23;38 и завтра может буду стыдиться, но хочется вопрос знать уже сейчас ;))) Итак, допустим есть файл размером в 0x323 байт, и его файл-маппит приложение через CreateFileMapping -> MapViewOfFile -> pDOS Вопрос: если мы возьмем и напишем цикл: Code:
то на каком значении "i" может обломиться прога ? И почему обломиться ? ЗЫ: У мну смутные догадки что прога в какой-то момент начнет писать чужую область памяти ? Но моя MS Visual Studio 2008 TS чего-то заглючила и проверить не могу (, может из-за пива, завтра разберусь почему ))) ----- My love is very cool girl. |
|
Создано: 07 декабря 2008 00:33 · Поправил: sniper · Личное сообщение · #2 |
|
Создано: 08 декабря 2008 13:02 · Личное сообщение · #3 Значение i, начиная с которого может произойти исключение ACCESS_VIOLATION (0xC0000005) определяется в данном случае типом указателя pDOS (DWORD*,WORD*,CHAR*?), т.е. тем по скольку байт увеличивается сдвиг, и размером маппируемой области. Если я правильно помню, маппирование идет блоками по 64Кб, т.е. опасное i = floor(65535 / sizeof(*pDOS)) + 1 = 16384 при размере указателя 4 байт. Только это опасное но не 100% вызывающее исключение значение. Вполне вероятно, что в адресном пространстве приложения в следующей за меппингом страницей памяти находятся данные приложения, доступные на запись. Это может быть область стека другого потока или область глобальных переменных. В общем случае результат непредсказуем. |
eXeL@B —› Программирование —› Работа с замапллеными в память файлами |