2016-01-28 1 views
0

Im получая ошибку при создании win8.1 проекта по Windows 10 с использованием VS2013для Windows 10 ошибка сборки Visual Studio 2013 для Windows, 8.1 проекта

'RAIG3D.Windows.exe' (Win32): Loaded 'C:\Windows\SysWOW64\mswsock.dll'. Symbols loaded. 
Debug Assertion Failed! 

Program: ...win8.1-universal\Debug\RAIG3D.Windows\AppX\RAIG3D.Windows.exe 
File: f:\dd\vctools\crt\crtw32\misc\dbgheap.c 
Line: 1424 

Expression: _pFirstBlock == pHead 

Im используя winsock2.h в течение .dll Thats, связанных с проектом. Его пользовательская сетевая библиотека пытается писать. Его на windows ветви

https://github.com/damorton/libsocket/tree/windows

Эта библиотека работает для win32 отладки программ хорошо, но для win8.1 его подачи выше ошибки

ответ

2

Это не ошибка сборки, это ошибка времени выполнения , В частности, было уволено утверждение. Это то, что сообщение сообщает вам:

Ошибка отладки!

Только что выполнен фрагмент кода, в котором используется некоторый вариант макроса 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. Сделайте полную перестройку с нуля, чтобы убедиться, что все они были обновлены.

+0

Я знаю, где ошибка в моем коде. Я написал специальную сетевую библиотеку, которая использует сокеты для linux и windows, поэтому ее в этом где-то. Можете ли вы сказать мне, что я что-то пропустил? https://github.com/damorton/libsocket – David

+0

Я также думаю, что это что-то делать со мной, а не для typedef'ing 'SOCKET' для окон и использования' int' вместо для сокета – David

+0

Im разрабатывает ветвь окон на данный момент, так что будет там. – David

 Смежные вопросы

  • Нет связанных вопросов^_^