Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.14.6.194] |
|
Сообщ.
#1
,
|
|
|
Добрый день!
После вылета exceptiona из-за memory access violation не создаётся новая страница и запись не продолжается.... Падает после окончания/записи char элемента на long long элементе,срабатывает исключение но там lpvResult 0000 и отрабатывает неправильно на кейс ==NULL for (int i = 0; i < arraySize; i++)//char=1(8),long long=8(64) together 9 { __try { lpNextPage = lpVirtualAddress; *(char*)(lpVirtualAddress) = *alphabet; (DWORD&)lpVirtualAddress += sizeof(char); int size = sizeof(char); cout << alphabet[i % alphabetSize] << "(" << lpVirtualAddress << ")" << ", "; *(long long*)(lpVirtualAddress) = *array; (DWORD&)lpVirtualAddress += sizeof(long long); size += sizeof(long long); cout << array[i] << "(" << lpVirtualAddress << ")" << ", "; } __except (PageFaultExceptionFilter(GetExceptionCode())) { printf("Error! %s!\n", (LPSTR)GetLastError()); } } INT PageFaultExceptionFilter(DWORD dwCode) { (DWORD&)lpNextPage += si.dwPageSize; if (dwCode != EXCEPTION_ACCESS_VIOLATION) { printf(("Exception code = %d.\n"), dwCode); return EXCEPTION_EXECUTE_HANDLER; } cout << endl; printf("Exception is a page fault.\n"); lpvResult = VirtualAlloc(lpNextPage, pageSize, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); if (lpvResult == NULL) { cout << " Next page:" << lpNextPage << endl;; cout << " Size of page:" << pageSize << endl;; cout << " lpvResult :" << lpvResult << endl;; printf("PageFaultExceptionFilter :Type - VirtualAlloc failed.\n"); return EXCEPTION_EXECUTE_HANDLER; } else { printf("Allocating another page.\n"); } //pageCounter++; return EXCEPTION_CONTINUE_EXECUTION; } Буду рад любой помощи. |