tinyxml2的奇怪片段

Strange segfault with tinyxml2

本文关键字:片段 tinyxml2      更新时间:2023-10-16

我有一个不明白的segfault。它总是发生在i=0并且j在1000和1100之间。以下是查看问题所需的回溯和所有来源:https://gist.github.com/Quent42340/7592902

请帮帮我。

编辑:哦,我忘了。在我的要点图上,cpp:72被评论了。它在我的源代码中也有注释。我这样做是为了看看问题是从哪里来的,但即使没有这条线,问题仍然存在。

我看到你在这里分配了一个指针数组:

m_data = new u16*[m_layers];

但是,我从来没有看到你为这个数组分配第二个维度。似乎应该将映射的行分配为一大块内存,自己将其分为块,或者每行分配new

例如,如果在for (i ...)循环中添加一行:

for(u8 i = 0 ; i < m_layers ; i++) {
        m_data[i] = new u16[m_width * m_height];

如果你走这条路,你还需要升级你的析构函数:

    Map::~Map() {
        // WARNING:  This doesn't handle the case where the map failed to load... 
        // Exercise for the reader.
        for (u8 i = 0; i < m_layers; i++) {
            delete[] m_data[i];
        }  
        delete[] m_data;
    }

另一种方法是使用std::array,并让C++标准库为您管理它。