Я испытываю довольно странный сбой в моем коде и не знаю, что его вызывает. Я пытаюсь использовать PhysFS в моем коде C ++. приведенный ниже код является частью класса, и Visual Studio 2017 сообщает мне, что сбой появляется в PHYSFS_mount()
, а затем в EnterCriticalSection()
, что, как я понимаю, связано с мьютексами. Теперь, насколько я понимаю, это должно быть правильно (обратите внимание, что основные вызовы initArchives()
сначала)
physfs_initialized = false;
...
void scope::parse_archive(const std::string& archive_path, const std::string& path_in_archive)
{
assert(physfs_initialized);
m_archivePath = archive_path;
m_relativeArchivePath = path_in_archive.substr(1);
//fsx = std::filesystem or std::expiremental::filesystem whatever floats your boat
if(exists(fsx::path(archive_path))) return;
if(!PHYSFS_mount(m_archivePath.c_str(),"",0)) return;
const auto file = PHYSFS_openRead(m_relativeArchivePath.c_str());
if(file) m_isValid = true;
PHYSFS_close(file);
PHYSFS_unmount(m_archivePath.c_str());
}
...
void initArchives(char ** argv)
{
if (!PHYSFS_init(argv[0])) physfs_initialized = true;
//a bit of ugly syntax because of the need to consume the return type
atexit([]() {PHYSFS_deinit(); });
}
Здесь, по-видимому, появляется авария
int __PHYSFS_platformGrabMutex(void *mutex)
{
EnterCriticalSection((LPCRITICAL_SECTION) mutex); // <-- here
return 1;
} /* __PHYSFS_platformGrabMutex */
Я что-то здесь не так делаю? Это проблема библиотеки или даже с моей ОС? Было ли что-то в сборке PhysFS, что я пропустил?
Редактировать: Я заметил, что я неправильно прочитал возвращаемое значение PHYSFS_init (), однако теперь я еще больше запутался, так как PHYSFS_getErrorByCode(PHYSFS_getLastErrorCode())
возвращает "нет ошибки", что здесь происходит?