gpt4 book ai didi

c++ - ntdll.dll 中未处理的异常

转载 作者:太空宇宙 更新时间:2023-11-04 14:12:42 24 4
gpt4 key购买 nike

我正在使用带有 boost v1.52.0 的 Visual Studio 2011 C++ 刚刚添加了在子目录中搜索文件的方法,并开始在程序关闭时出现此错误:

Unhandled exception at 0x7733E3BE (ntdll.dll) in Platformer.exe: 0xC0000005: Access violation reading location 0x437FEF0C.

文件系统.h:

#ifndef FILESYSTEM_H
#define FILESYSTEM_H

#include "boost/filesystem.hpp"

namespace fs=boost::filesystem;

class FileSystem
{
public:
static const std::string GetExePath();
static const std::string GetFullPath(std::string fileName, std::string searchInPath = "");
};

#endif

文件系统.cpp

#include "FileSystem.h"

const std::string FileSystem::GetExePath()
{
fs::path path = fs::current_path();
return path.string();
}

const std::string FileSystem::GetFullPath(std::string fileName, std::string searchInPath)
{
if(searchInPath == "")
{
searchInPath = GetExePath();
}

fs::directory_iterator end_iter;
for( fs::directory_iterator dir_iter(searchInPath); dir_iter!=end_iter; ++dir_iter)
{
if(fs::is_directory(dir_iter->status()))
{
return GetFullPath(fileName, dir_iter->path().string());
}
else if (fs::is_regular_file(dir_iter->status()))
{
if(dir_iter->path().filename() == fs::path(fileName).filename())
{
return dir_iter->path().string();
}
}
}

return std::string("");
}

我就是这样使用它的:

std::string imageFullPath = FileSystem::GetFullPath("image.png");

这段代码有什么问题?谢谢。

最佳答案

首先,我没有提到我使用的是 SDL(简单直接媒体层)库。这些库是使用 #pragma comment (lib, ...) 链接的,这会导致应用程序关闭时出错。我在 Project Properties -> Linker -> Input -> Additional Dependencies 部分定义了它们,问题就解决了。

其次GetFullPath方法错误。这是正确的:

const std::string FileSystem::GetFullPath(std::string fileName, std::string searchInPath)
{
std::string result;

if(searchInPath.empty()) {
searchInPath = GetExePath();
}

fs::directory_iterator end_iter;
for( fs::directory_iterator dir_iter(searchInPath); dir_iter!=end_iter; ++dir_iter)
{
if(fs::is_directory(dir_iter->status()))
{
result = GetFullPath(fileName, dir_iter->path().string());
if(!result.empty())
{
break;
}
}
else if (fs::is_regular_file(dir_iter->status()))
{
if(dir_iter->path().filename() == fs::path(fileName).filename())
{
result = dir_iter->path().string();
if(!result.empty())
{
break;
}
}
}
}

return result;
}

关于c++ - ntdll.dll 中未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13378632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com