Возможно, у вас поврежденная куча.Это может быть вызвано недействительными освобождениями (освобождение ненужной или уже свободной памяти) или некоторой случайной порцией кода, записываемого за пределы его области памяти, в место, где хранятся структуры данных поддержки кучи.Скорее всего, это будет фрагмент кода, который не имеет ничего общего с этой динамически выделяемой памятью.
Отслеживание ошибок, как это настоящий медведь.Они появляются долго после того, как испорченный код был выполнен, и имеют раздражающую тенденцию превращаться в heisenbugs (ошибки, которые перемещаются или исчезают при попытке их отладки).
MyДля подхода к отладке было бы предложено попытаться закомментировать части вашего кода и посмотреть, что приводит к устранению проблемы.Это небезопасно, так как вы можете просто переместить запретную запись в другое место.
Просматривая код, который вы только что опубликовали, одну вещь, которую я бы весьма предложилвам нужно убедиться, что ваша malloc
указала достаточно памяти для хранения всех данных, которые вы пытаетесь загрузить в нее.Мне кажется, что вы принимаете 2 байта для каждой вершины.Это кажется мне немного подозрительным.Я не знаю ваш код, но 4 или 8 были бы гораздо более распространенными размерами элементов, чтобы увидеть там.Несмотря на это, отраслевая практика заключается в том, чтобы использовать sizeof()
для целевого типа, чтобы убедиться, что вы правильно поняли.
Другой вариант, если ваше сообщение отладчика может показать вам, где оно происходит, было бы поставитьНаблюдайте за точкой отладчика (или напишите некоторый код наблюдения ... или вручную выгрузите и осмотрите область) при входе в отладчик, чтобы попытаться выяснить, какая строка кода нарушена.
Удачи.Я ненавижу этих ошибок.