Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用std:map时崩溃_C++_Sdl_Stdmap - Fatal编程技术网

C++ 使用std:map时崩溃

C++ 使用std:map时崩溃,c++,sdl,stdmap,C++,Sdl,Stdmap,在我的SDL程序中,我使用映射构造来模拟某个类中对象的“无限”数组。代码能够很好地编译,但是当我运行程序时,一旦使用映射的函数之一被触发,程序就会崩溃,返回值为3 所以,我现在要做的就是: class MyClass { public: int MyFunction(); protected: std::map< int, MyObject > MyMap; } int MyClass::MyFunction() {

在我的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;

}
class-MyClass
{
公众:
int MyFunction();
受保护的:
std::mapMyMap;
}
int MyClass::MyFunction()
{
...
int i;
if(MyMap.empty())
{
i=1;
}
其他的
{
i=MyMap.size()+1;
}
MyMap[i]=先前定义的对象;
返回i;
}
从MyClass对象调用MyFunction()时,会发生崩溃。每当使用MyMap完成任何操作时,似乎都会发生这种情况:如果注释掉倒数第二行并尝试返回i,则会崩溃;如果设置i=1,然后将对象分配给MyMap[i],则会崩溃


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

贴图用于将键与值关联。如果要查找数组,则应使用。它在模拟“无限数组”方面比映射做得更好,因为映射不是数组

注:通常,您可以使用向量分配许多元素。如果你真的想模拟一个大的数组,我建议你用一个向量的向量。通过一些数学运算,您可以为它创建一个
操作符[]
,将其索引到正确的数组中,指向正确的元素


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

映射用于将键与值关联。如果要查找数组,则应使用。它在模拟“无限数组”方面比映射做得更好,因为映射不是数组

注:通常,您可以使用向量分配许多元素。如果你真的想模拟一个大的数组,我建议你用一个向量的向量。通过一些数学运算,您可以为它创建一个
操作符[]
,将其索引到正确的数组中,指向正确的元素


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

可能您是从未初始化的指针调用函数,如下所示:

MyClass *obj;
obj->MyFunction();

可能是从未初始化的指针调用函数,如下所示:

MyClass *obj;
obj->MyFunction();

不需要你的if子句——else语句应该可以很好地工作,即使对于空映射也是如此。你包含的所有内容看起来都不错——你能详细说明一下先前定义的Object和MyObject的声明/定义吗?MyObject是一个包含四个变量的结构:两个整数、一个std::string和一个SDL_Surface*。它在单独的头文件中定义。它用于存储.BMP文件、其高度、宽度和文件名。通过获取文件名(此函数的输入参数),加载.BMP,找到它的高度和宽度,并将其分配给结构中的相应变量。不需要if子句——else语句应该可以很好地工作,即使对于空映射也是如此。您包含的所有内容看起来都很好——您能详细说明先前定义的Object和MyObject的声明/定义吗?MyObject是一个包含四个变量的结构:两个整数,一个std::string和一个SDL_Surface*。它在单独的头文件中定义。它用于存储.BMP文件、其高度、宽度和文件名。先前定义的对象是通过获取文件名(此函数的输入参数)、加载.BMP、查找其高度和宽度并将其分配给struct…Oops中的相应变量来生成的。这当然正是我正在做的;之前忘记了一行代码,还没有初始化obj。完成这项工作后,代码运行良好。非常感谢……哦。这当然正是我正在做的;之前忘记了一行代码,还没有初始化obj。完成这项工作后,代码运行良好。非常感谢。