使用std:map时崩溃

时间:2009-11-24 06:37:12

标签: c++ sdl stdmap

在我的SDL程序中,我使用map构造来模拟某个类中的“无限”对象数组。代码设法编译正常,但是当我运行程序时,只要触发了使用map的其中一个函数,程序就会崩溃,返回值为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] <它会崩溃/ p>

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

2 个答案:

答案 0 :(得分:2)

也许你是从一个未初始化的指针调用该函数,如下所示:

MyClass *obj;
obj->MyFunction();

答案 1 :(得分:0)

地图用于将键与值相关联。如果您正在寻找阵列,则应使用vector。它可以更好地模拟“无限阵列”而不是地图,因为地图不是数组。

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

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