Процесс возвратил -1073741819 (0xC0000005) при назначении значений для структурных массивов - PullRequest
0 голосов
/ 10 ноября 2019

Заголовок

#define XY 2
#define XPOS 0
#define YPOS 1
#define MAX_X_COORDINATE 64
#define MAX_Y_COORDINATE 64
#define MAX_FRAME 64

typedef struct
{
    int pos[XY];
    char p;//particle
}particle_t;

typedef struct
{
    int index;
    int offset;
    int delay;
    particle_t particle[MAX_X_COORDINATE][MAX_Y_COORDINATE];
}frame_t;

frame_t frame[MAX_FRAME]={0};

int main()
{
    printf("Loading...\n");
    for(int i=0;i<MAX_FRAME;i++)
    {
        frame[i].index=i;
        frame[i].offset=0;
        frame[i].delay=50;
        for(int j=0;i<MAX_X_COORDINATE;j++)
        {
            for(int k=0;i<MAX_Y_COORDINATE;k++)
            {
                frame[i].particle[j][k].pos[XPOS]=j;
                frame[i].particle[j][k].pos[YPOS]=k;
                frame[i].particle[j][k].p=' ';
            }
        }
    }
    return 0;
}

Эти три строки:

frame[i].particle[j][k].pos[XPOS]=j;
frame[i].particle[j][k].pos[YPOS]=k;
frame[i].particle[j][k].p=' ';

, казалось, вызывали проблему, поскольку их удаление заставило терминал перестать возвращать 0xC0000005, но не вернулось 0или. Он просто зависнет, ничего не возвращаясь.

Компилятор не выдал ошибку или предупреждение.

Ответы [ 2 ]

2 голосов
/ 10 ноября 2019
        for(int k=0;i<MAX_Y_COORDINATE;k++)

должно быть

        for(int k=0; k<MAX_Y_COORDINATE;k++)

Именно поэтому всегда называйте переменную каким-либо значимым и читабельным именем.

1 голос
/ 10 ноября 2019

Также

for(int j=0;i<MAX_X_COORDINATE;j++)

Должно быть

for(int j=0;j<MAX_X_COORDINATE;j++)

У вас есть бесконечный цикл внутри бесконечного цикла. Нет концевых условий в циклах, потому что i не изменяется.

Редактировать: По совпадению, возвращаемое значение 0xC00000005 больше всего похоже на то, что вы как бы «переполняете стек».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...