Этот вопрос почти всегда является простым.Код плохой.Это редко инструменты, просто из статистического анализа.Неисчислимые миллионы людей используют Visual Studio каждый день, и, возможно, некоторые используют ваш код - какой фрагмент кода проходит лучшее тестирование?Я гарантирую, что, если бы это было проблемой с VS, мы, вероятно, уже нашли бы ее.
Что означает это утверждение, то, что, когда вы пытаетесь получить доступ к памяти, которая не принадлежит вам, обычно это происходит потому, что вы 'делает это с поврежденным указателем, который пришел откуда-то еще.Вот почему в нем указывается индикация.
При повреждении памяти обнаружение ошибки редко является основной причиной ошибки.И эффекты именно то, что вы описываете, на первый взгляд случайные.Вам просто нужно взглянуть на обычных преступников, например:
- неинициализированные указатели или другие значения.
- запись в буфер больше, чем его размер.
- ресурсы, совместно используемые потоками, которые не защищены мьютексами.
Работать в обратном направлении с такой проблемой, чтобы найти основную причину, невероятно сложно, учитывая, что так много могло произойтимежду созданием проблемы и ее обнаружением.
В большинстве случаев мне легче взглянуть на то, что повреждено (скажем, на конкретный указатель), а затем выполнить статическую ручную проверку.анализ кода, чтобы увидеть, что могло его испортить, проверка обычных преступников, как показано выше.Однако даже это не вызовет длинных цепочек проблем.
Я недостаточно знаком с VS, чтобы знать, но вы также можете рассмотреть возможность использования инструмента отслеживания памяти (например, valgrind для Linux), чтобы увидеть, может ли он обнаружить какие-либо очевидные проблемы.