Ошибка, с которой вы сталкиваетесь, может не иметь прямого отношения к вашему вектору.Если память (куча) повреждена до вызова деструктора вашего вектора, то менеджер кучи может только обнаружить повреждение в это время (освобождая структуру, динамически выделяемую вектором или динамически размещаемыми строками внутри).
На мой взгляд, лучший способ устранения подобных ошибок на платформе Windows - активировать полную страницу кучи для вашей программы.
Вы можете сделать это двумя способами:
- либо используя gflags, содержащиеся в «Средствах отладки для Windows».Запустите его как администратор, перейдите на вкладку «Файл изображения», введите имя вашего EXE-файла в поле «Изображение» (AxCent.exe), нажмите TAB, отметьте «Включить кучу страниц» и нажмите «Применить»
- или используйте Application Verifier.Выберите исполняемый файл в меню приложения «Файл / приложение», установите флажок «Основные / куча» и нажмите «Сохранить».
Этот параметр будет применяться при каждом запуске этого приложения.
Затем запустите приложение под отладчиком (WindDbg или Visual Studio).Если память была повреждена до удаления вектора, в этот момент отладчик должен прекратить работу.
Когда вы закончите отслеживать ошибку, не забудьте отключить Full Page Heap.