【问题标题】:Why is this member's value changing? [closed]为什么这个成员的价值会发生变化? [关闭]
【发布时间】:2012-12-22 03:29:43
【问题描述】:

我正在创建一个名为“ID1000”的“地图”类型的对象。该对象包含一个成员“Platforms[][]”。 Platforms[][] 是一个二维数组。

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

ID1000.Platforms[0][0] = 100;

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

al_draw_textf(font18, al_map_rgb(255, 0, 255), 5, 5, 0, "TargetY: %f", 800 - TargetY);

object_name[0][0] 突然从 100 变为 1065353216。这一行只是 2d 图形库 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;
}

【问题讨论】:

    标签: c++ class object member allegro


    【解决方案1】:

    数组int Platforms[][4](它是一个零行数组,每行4 个整数)。它在 C++ 程序中也是无效的。 (不过,这是有效的 C 语言,它被称为“灵活数组元素”。预期用途是让您过度分配对象并使用数组访问语法在对象之后寻址额外的内存)

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

    此时您处于未定义的行为中,任何事情都可能发生。我猜您正在访问的内存位置是指针display 使用的内存位置,您将在其中写入al_create_display() 的结果。

    【讨论】:

    • 非常感谢。那解决了它。问题是,我需要 Platforms[][] 来改变每个对象的大小。这就是为什么我没有定义一维,希望它能起作用。我想现在我会研究如何实现这一目标。
    猜你喜欢
    • 1970-01-01
    • 2012-11-18
    • 2013-01-18
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多