在我的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>
这是我第一次使用地图,所以我不确定我是否正确使用它们。这是某个地方的基本错误吗?谁能指出我正确的方向?欢呼声。
答案 0 :(得分:2)
也许你是从一个未初始化的指针调用该函数,如下所示:
MyClass *obj;
obj->MyFunction();
答案 1 :(得分:0)
地图用于将键与值相关联。如果您正在寻找阵列,则应使用vector
。它可以更好地模拟“无限阵列”而不是地图,因为地图不是数组。
注意,您通常可以使用向量分配很多元素。如果你真的想模拟一个大型数组,我建议包装一个向量向量。通过一些数学运算,您可以为正确的数组创建一个operator[]
索引到正确的元素。
至于你的代码,确实没有足够的信息来确定它应该崩溃的原因,你必须尝试创建一个最小的程序供我们编译或查看。