私は練習として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
}
}
提供されたコードは、質問に答えるのに十分な、完全ではないようです。 –
私は、型が無関係であると思ったのは、それが明示的に消去行を指し示しているアクセス違反だからです。 –