C++ 为什么这个成员是';它的价值在变化?

C++ 为什么这个成员是';它的价值在变化?,c++,class,object,member,allegro,C++,Class,Object,Member,Allegro,我正在创建一个名为“ID1000”的对象,类型为“Maps”。该对象包含一个成员“Platforms[][]”。平台[][]是一个二维阵列 class Maps{ int Platforms[][4] } ID1000; ID1000.Platforms[0][0] = 100; 在这里,我将平台[0][0]设置为100。 但是,当我执行这行代码时 al_draw_textf(font18, al_map_rgb(255, 0, 255), 5, 5, 0, "TargetY: %f", 8

我正在创建一个名为“ID1000”的对象,类型为“Maps”。该对象包含一个成员“Platforms[][]”。平台[][]是一个二维阵列

class Maps{
int Platforms[][4]
} ID1000;

ID1000.Platforms[0][0] = 100;
在这里,我将平台[0][0]设置为100。 但是,当我执行这行代码时

al_draw_textf(font18, al_map_rgb(255, 0, 255), 5, 5, 0, "TargetY: %f", 800 - TargetY);
对象名称[0][0]突然从100变为10653216。这条线只是二维图形库Allegro的一个函数,它将文本绘制到窗口上。我一辈子都搞不懂为什么它与我的会员的价值观有关

如果您有任何想法或建议,我将不胜感激

这是完整的程序

#include <allegro5/allegro.h>
#include <allegro5/allegro_image.h>
#include <allegro5/allegro_primitives.h>
#include <allegro5/allegro_font.h>
#include <allegro5/allegro_ttf.h>
#include <math.h>
#include <iostream>

const int WIDTH = 1000;
const int HEIGHT = 800;


class Maps {
    public:
        int NumPlat;
        int MapWidth;
        int Platforms[][4];
    };

int main(int argc, char **argv)
{
Maps ID1000;
ID1000.Platforms[0][0] = 100;

ALLEGRO_DISPLAY *display = NULL;
ALLEGRO_FONT *font18;

float TargetY = 0;

if(!al_init())
    return -1;

display = al_create_display(WIDTH, HEIGHT);

if(!display)
    return -1;

al_install_keyboard();
al_init_image_addon();
al_init_font_addon();
al_init_ttf_addon();
al_init_primitives_addon();

font18 = al_load_font("BALTH___.ttf", 18, 0);

std::cout << ID1000.Platforms[0][0];
al_draw_textf(font18, al_map_rgb(255, 0, 255), 5, 5, 0, "TargetY: %f", 800 - TargetY);  //display horizontal position on screen
std::cout << ID1000.Platforms[0][0];

al_destroy_font(font18);

return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
常数整数宽度=1000;
const int HEIGHT=800;
类图{
公众:
国际货币基金组织;
int地图宽度;
int平台[][4];
};
int main(int argc,字符**argv)
{
ID1000地图;
ID1000.平台[0][0]=100;
快板显示*显示=NULL;
快板字体*font18;
float TargetY=0;
如果(!al_init())
返回-1;
显示=创建显示(宽度、高度);
如果(!显示)
返回-1;
安装键盘();
al_init_image_addon();
al_init_font_addon();
al_init_ttf_addon();
al_init_primitives_addon();
font18=加载字体(“BALTH_uuuu.ttf”,18,0);

STD::CUT< P>数组<代码> int St[ ] [4 ] 是<强>空(它是一个零行数组,4个INTS)。它在C++程序中也是无效的。(这是有效的C,在这里称为“灵活数组元素”。。预期用途是过度分配对象,并使用数组访问语法寻址对象之后的额外内存)

访问
ID1000.Platforms[0][0]
(第一行中的第一个int)时访问的内存位置位于数组外部,实际上位于
ID1000
对象外部


此时,您处于未定义的行为中,任何事情都可能发生。我猜您正在访问的内存位置是指针
display
所使用的位置,您在该位置写入
al\u create\u display()

的结果。非常感谢。这就解决了问题。问题是,我需要平台[][]每个物体的大小都不一样。这就是为什么我没有定义一维,希望它能起作用。我想现在我要研究如何做到这一点。