0

在我的 SDL 程序中,我使用映射构造来模拟某个类中的“无限”对象数组。代码设法编译得很好,但是当我运行程序时,一旦触发使用映射的函数之一,程序就会崩溃,返回值 3。

所以,这正是我正在做的事情:

class MyClass
{
     public:
           int MyFunction();
     protected:
           std::map< int, MyObject > MyMap;
}

int MyClass::MyFunction()
{
     ...
     int i;

     if( MyMap.empty() )
     {
          i = 1;
     }
     else
     {
         i = MyMap.size() + 1;
     }

     MyMap[ i ] = PreviouslyDefinedObject;

     return i;

}

当从 MyClass 对象调用 MyFunction() 时,会发生崩溃。每当使用 MyMap 完成任何使用时,它似乎都会发生:如果您注释掉倒数第二行并尝试返回 i,它会崩溃,如果您只是设置 i = 1,然后将对象分配给 MyMap[i],它会崩溃

这是我第一次使用地图,所以我不确定我是否正确使用它们。这是某个地方的基本错误吗?谁能指出我正确的方向?干杯。

4

2 回答 2

3

也许您正在从未初始化的指针调用函数,如下所示:

MyClass *obj;
obj->MyFunction();
于 2009-11-24T06:47:35.403 回答
0

映射用于将键与值相关联。如果你正在寻找一个数组,你应该使用vector. 与地图相比,它在模拟“无限数组”方面会做得更好,因为地图不是数组。

请注意,通常可以使用向量分配很多元素。如果您真的想模拟一个大型数组,我建议您包装一个向量向量。通过一些数学运算,您可以为它创建一个operator[]索引到正确数组和正确元素的索引。

至于您的代码,确实没有足够的信息来确定它为什么会崩溃,您必须尝试创建一个最小的程序供我们编译或查看。

于 2009-11-24T06:40:13.517 回答