Я создаю объект с именем «ID1000» типа «Карты». Объект содержит член «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);
имя_объекта [0] [0] внезапно изменяется с 100 на 1065353216. Эта строка является просто функцией 2-й графической библиотеки 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;
}
Массив int Platforms[][4]
является пустой (это массив нулевых строк по 4 дюйма в каждой). Это также недопустимо в программе на C ++. (это действительно C, где он называется «гибкий элемент массива». Предполагаемое использование для вас — перераспределить объект и обратиться к дополнительной памяти после объекта, используя синтаксис доступа к массиву)
Расположение в памяти, к которому вы обращаетесь при доступе ID1000.Platforms[0][0]
(первый int в первом ряду) находится вне массива, а на самом деле вне ID1000
объект.
В этот момент вы находитесь в неопределенном поведении, все может происходить. Я предполагаю, что ячейка памяти, к которой вы обращаетесь, указатель, используемый указателем display
где вы пишете результат al_create_display()
,
Других решений пока нет …