연습으로 C++로 쓰는 메모리 스캐너에서 일치하지 않는 결과를 제거하려고합니다. 메모리를 처음 스캔하면 모든 결과가 _results
벡터에 저장됩니다.액세스 위반 C ++ (벡터에서 항목 삭제)
나중에 _results
을 다시 스캔하여 더 이상 일치하지 않는 항목을 지워야합니다.
오류 다음 std::vector<T>
대상 항목을 삭제 한 후 기본 배열의 연속을 유지하기 위해 주변 요소를 이동합니다 이후 std::vector<T>
에서
Unhandled exception at 0x004016f4 in .exe: 0xC0000005: Access violation reading location 0x0090c000.
// Receives data
DWORD buffer;
for (vector<memblock>::iterator it = MemoryScanner::_results.begin(); it != MemoryScanner::_results.end(); ++it) {
// Reads data from an area of memory into buffer
ReadProcessMemory(MemoryScanner::_hProc, (LPVOID)(*it).address, &buffer, sizeof(buffer), NULL);
if (value != buffer) {
MemoryScanner::_results.erase(it); // where the program breaks
}
}
에서 제공하는 코드는 질문에 대답하기에 충분 완료 될 것 같지 않습니다. –
필자는이 형식이 지우기 선을 명시 적으로 가리키는 액세스 위반이기 때문에 유형이 관련성이 없다고 생각했습니다. –