C++ TinyXML抛出访问冲突

C++ TinyXML抛出访问冲突,c++,tinyxml,C++,Tinyxml,我最近开始使用tinyXML。问题是,当我运行程序读取xml时,它返回一个访问冲突。一个共同点是: doc.FirstChildElement("Map")->FirstChildElement("Width")->GetText() 使用VisualStudio调试器,我确定它为“映射”返回null,然后使用null引用调用函数 下面是第一行代码和xml XMLDocument doc; doc.LoadFile(path.c_str()); int width

我最近开始使用tinyXML。问题是,当我运行程序读取xml时,它返回一个访问冲突。一个共同点是:

doc.FirstChildElement("Map")->FirstChildElement("Width")->GetText()
使用VisualStudio调试器,我确定它为“映射”返回null,然后使用null引用调用函数

下面是第一行代码和xml

XMLDocument doc;
    doc.LoadFile(path.c_str());

    int width = atoi(doc.FirstChildElement("Map")->FirstChildElement("Width")->GetText());
XML:


5.
5.
1.
1.
data/tiles/dirty-base.png
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

重要的是要注意,我最初没有根标记,但在它不起作用时添加了它,尽管添加它仍然没有帮助。任何帮助都将不胜感激

在我看来,您正在调用的TinyXML函数中有一个返回无效指针。尝试分别检查每个调用的结果,您将能够确定问题。

在我看来,您正在调用的TinyXML函数中有一个返回了无效指针。尝试分别检查每个呼叫的结果,您将能够确定问题。

更改

int width = atoi(doc.FirstChildElement("Map")->FirstChildElement("Width")->GetText());

它在我的电脑上工作,使用最新的tinyxml

根据TinyXml文档

您应该首先检查LoadFile返回

if (!_doc.LoadFile(filename))
{
    printf("load file=[%s] failed\n", filename);
    return -1;
}
然后检查元素是否存在以避免访问冲突

使用TiXmlHandle检查元素更容易

TiXmlHandle docHandle(&doc);
TiXmlElement* child = docHandle.FirstChild("Map").FirstChild("Width").ToElement();
if (child)
{
    // do something useful
改变

int width = atoi(doc.FirstChildElement("Map")->FirstChildElement("Width")->GetText());

它在我的电脑上工作,使用最新的tinyxml

根据TinyXml文档

您应该首先检查LoadFile返回

if (!_doc.LoadFile(filename))
{
    printf("load file=[%s] failed\n", filename);
    return -1;
}
然后检查元素是否存在以避免访问冲突

使用TiXmlHandle检查元素更容易

TiXmlHandle docHandle(&doc);
TiXmlElement* child = docHandle.FirstChild("Map").FirstChild("Width").ToElement();
if (child)
{
    // do something useful

正如您在问题的评论中所说,错误代码3是
未找到文件
您很可能已经解决了这一问题,但造成这一问题的一个常见原因就是将反斜杠放在错误的路径上

我自己也有这个问题。在做了相当多的web开发之后,由于脚本编写/标记/服务器端/客户端的恐惧不同,在同一个项目中斜杠的方向也不同(有时在发布时,您需要将斜杠的方向颠倒一半!),这种情况就发生了很多。我还是被难住了整整一个小时


为了参考起见,推迟发布这个可能的解决方案-这是谷歌在TinyXML和这个问题上最显著的结果。

正如您在问题的评论中所说,错误代码3是
找不到文件
您很可能已经解决了这一问题,但造成这一问题的一个常见原因就是将反斜杠放在错误的路径上

我自己也有这个问题。在做了相当多的web开发之后,由于脚本编写/标记/服务器端/客户端的恐惧不同,在同一个项目中斜杠的方向也不同(有时在发布时,您需要将斜杠的方向颠倒一半!),这种情况就发生了很多。我还是被难住了整整一个小时


为了参考起见,延迟使用这个可能的解决方案-这是TinyXML上最突出的Google结果,也是这个问题。

什么是
doc.LoadFile(…)
返回?如果不检查函数返回的指针是否为非空指针,请不要使用函数返回的指针。错误代码为3,现在查看文档时,似乎找不到该文件…即使我在调试目录的data/maps/map1.xml中有它,它应该从中运行…doc.LoadFile(…)返回什么?如果不检查函数返回的指针是否为非空指针,请不要使用函数返回的指针。错误代码为3,现在查看文档时,似乎找不到该文件…即使我在调试目录的data/maps/map1.xml中找到了它,它应该从中运行。。。