Возникло исключение в 0x00007FF93E507A7A (ntdll.dll) . Место чтения нарушения доступа 0xFFFFFFFFFFFFFFFF
Я использую POCO lib для работающей сети. Я использую данные JSON POCO/JSON . мой код:
User user(context.marshal_as<std::string>(tbUserName->Text),
context.marshal_as<std::string>(tbFullName->Text),
context.marshal_as<std::string>(tbDisplayName->Text),
context.marshal_as<std::string>(tbEmail->Text),
context.marshal_as<std::string>(tbPhoneNumber->Text),
context.marshal_as<std::string>(tbNamSinh->Text),
context.marshal_as<std::string>(tbPassword->Text),
context.marshal_as<std::string>(tbConfirm->Text)
);
string jsonString = user.serialize();
Возникла ошибка. 0x00007FF93E507A7A
(ntdll.dll
) в Client_Winform.exe:
0xC0000005: Место чтения нарушения доступа 0xFFFFFFFFFFFFFFFF.
Если есть обработчик для этого исключения, программа может быть безопасно продолжена.
4 ответа
Вы используете дескриптор, который был возвращен как INVALID_HANDLE от некоторой функции (INVALID_HANDLE равен -1 или 0xFFFFFFFFFFFFFFFF). Когда вы пытаетесь использовать его, он используется как адрес, и у вас нет прав доступа к этому адресу (ошибка 5 - нарушение доступа).
Используйте анализ кода Visual Studio, чтобы отследить точное место в вашем коде, где находится ошибка. https://msdn.microsoft.com/en-us/library/ms182028.aspx Проблема с такого рода сообщениями об ошибках не в том, чтобы понять причину (плохая ручка), а в том, чтобы найти место. Поскольку ваш код прошел компиляцию без ошибок, и во многих случаях он будет работать на нескольких машинах без сбоев и только на одном из них, вам необходимо сосредоточиться на месте сбоя.
Я создавал проект 10-летней давности с отладкой, установленной как x64. Когда я перешел на x86 для отладки и Win32 в диспетчере конфигурации, ошибка «ntdll.dll не может найти» исчезла. Остается проблема в том, что malloc/free выдает ошибку времени выполнения в некоторых местах, но не в других. Изменение на новые/удаленные форматы решило эту проблему.
Это могло произойти, когда у вас есть мультиплатформенные проекты (например, сборки). Это означает, что если у вас есть один проект на x86, а другой - на x64. Проблема возникает, когда вы строите проект на неправильной платформе. Например, упомянутая сборка x64 под x86 и в коде потребителя пытается вызвать конкретную функцию. Из-за этих смешанных сборок на платформе расчет эталона приводит к типу местоположения x00000005 или xFFFFFFFF, которое является ограниченной областью в побочном ОЗУ (т.е. часть ОС). Следовательно, он генерирует исключение с сообщением типа «Местоположение чтения исключения нарушения прав доступа ...». Решение, которое я нашел, - это определить и применить точную платформу к соответствующему проекту. Я снова получил полностью свежий код из репозитория и построил его под конкретную платформу, и эта проблема исчезла.