Я недавно столкнулся с моим первым сражением (решено) с повреждением кучи.На моей машине linux дома код преступника завершается без ошибок, используя valgrind и electric-fence (с помощью gdb).Тем не менее, на компьютере с Windows в нашей лаборатории я постоянно получаю сообщение об ошибке, связанной с повреждением кучи, от VS, описанной в моей публикации.
Удивительно (или, по крайней мере, необычно), что valgrind и электрический забор не обнаружаттакая проблема?Кто-то еще упомянул, возможно, похожую ошибку, которая ускользнула от Вальгринда в ответе здесь .Какие могут быть причины, по которым эти инструменты не будут обнаружены этими инструментами?Есть ли основания сомневаться в том, что ошибка на самом деле является повреждением кучи?
Обновление : Как уже упоминалось в посте, описывающем исходную проблему, я обнаружил, что проблема заключалась в наличии указателей на элементыв std :: vector, который стал плохим.Замена векторов на std :: list (на которые указатели не становятся недействительными при добавлении новых элементов) исправила проблему.Итак, возвращаясь к моему вопросу о том, почему valgrind не обнаружил проблему, я спрашиваю, есть ли какие-либо рекомендации о том, как избежать подобной ситуации в будущем, а именно о проблеме с памятью, которая не обнаруживается valgrind, которая является одной из моихлюбимые инструменты.Очевидно, что было бы лучше понять, как работает STL.Возможно, мне нужно быть более настойчивым с утверждением в моем программировании и т. Д.