Это не ошибка сборки, это ошибка времени выполнения , В частности, было уволено утверждение. Это то, что сообщение сообщает вам:
Ошибка отладки!
Только что выполнен фрагмент кода, в котором используется некоторый вариант макроса assert
, чтобы поймать возможные ошибки. Он поймал одного. Это хорошо. Еще лучше, если он говорит вам где, что утверждать макрос был уволен:
программы: ... win8.1 универсальная \ Debug \ RAIG3D.Windows \ AppX \ RAIG3D.Windows.exe
Файл: F : \ дд \ vctools \ элт \ crtw32 \ разное \ dbgheap.c
Line: 1424
Это ваша программа, но не ваш файл кода. Таким образом, это не утверждение, которое вы написали, это то, что разработчики Microsoft внесли в свои подпрограммы библиотеки времени выполнения C. В частности, в файле dbgheap.c
, который предполагает, что он имеет какое-то отношение к кучке отладки, которая используется для выделения памяти в отладочных сборках.
В сообщении также говорит вам, что это выражение, что оказалось неожиданно ложным и, следовательно, вызвало утверждать, что:
Expression: _pFirstBlock == pHead
Похоже, два указателя, которые были предположительно равным были фактически не единый.
Если вы нажали кнопку «Повторить попытку» в появившемся окне сообщения, вы могли бы прорваться в код с помощью отладчика и увидеть строку нарушения кода в контексте. У вас также был бы полный стек вызовов, чтобы посмотреть.
Стол вызовов был бы полезен, чтобы увидеть, какая строка из вашего кода выполнялась до того, как вы вызвали код библиотеки, который произвел это утверждение. Это утверждение является внутренней проверкой согласованности, которую авторы CRT помещают в свои программы распределения памяти. Если вы запускаете его, вы делаете что-то плохое внутри своего приложения.
Если бы я был опасен, если у меня не было никакой дополнительной информации, чем у меня, я бы предположил, что вы, вероятно, пытались смешивать исполняемые файлы и библиотеки, которые ссылаются на разные версии ЭЛТ.Это неподдерживается и может привести к серьезным проблемам. Различные версии CRT имеют разные размеры объектов, макеты памяти, статические переменные и т. Д. На этот раз вам повезло, что это было уловлено утверждением. Убедитесь, что все проекты ваших проектов нацелены на ту же версию CRT, включая те, которые генерируют библиотеки DLL и LIB. Сделайте полную перестройку с нуля, чтобы убедиться, что все они были обновлены.
Я знаю, где ошибка в моем коде. Я написал специальную сетевую библиотеку, которая использует сокеты для linux и windows, поэтому ее в этом где-то. Можете ли вы сказать мне, что я что-то пропустил? https://github.com/damorton/libsocket – David
Я также думаю, что это что-то делать со мной, а не для typedef'ing 'SOCKET' для окон и использования' int' вместо для сокета – David
Im разрабатывает ветвь окон на данный момент, так что будет там. – David