Почему следующее объявление структуры в C ++ вызывает выход 127? - PullRequest
0 голосов
/ 02 февраля 2020

Я пытаюсь решить проблему на странице обучения USACO, и я решил, что мне понадобится следующая декларация:

const int NMAX=35;
.
.
.
struct type{
     int x,y;
     int mat[2][NMAX][NMAX];
};

Используя это, я написал программу, которая работает на моем компьютер, но когда я отправляю исходный файл в USACO Grader, я получаю следующую ошибку:

Ваша программа напечатала данные в stderr. Вот данные: Я заметил, что ошибка выдается во время компиляции, до запуска программы. Более того, я увидел, что если я комментирую объявление структуры, которую удается скомпилировать, и если я оставляю структуру без комментариев, но я комментирую объявление трехмерного массива, он также компилируется.

Пример:

struct type{
     int x,y;
     //int mat[2][NMAX][NMAX]; 
};

(вышеуказанный код в порядке)

Не могли бы вы объяснить, что не так с этим объявлением и как его исправить?

Большое спасибо!

Редактировать: Мое первоначальное убеждение состояло в том, что сама структура была источником ошибки, но реальность состояла в том, что это было объявление массива, следующее сразу после объявления структуры.

const int NMAX=35;
.
.
.
struct type{
     int x,y;
     int mat[2][NMAX][NMAX];
}arr[NMAX*NMAX];

Проверка ограничений оператора задачи позволил мне уменьшить размер массива, и это решило проблему. Спасибо всем за помощь!

Ответы [ 2 ]

0 голосов
/ 02 февраля 2020

Решено: как видно из отредактированного раздела вопроса, проблема заключалась в выделении памяти для массива этого типа структуры, а не в самом объявлении структуры, и это было связано с ограничениями проблемы.

0 голосов
/ 02 февраля 2020

Вам нужно поставить точку с запятой после закрывающей фигурной скобки структуры.

struct type{
 int x,y;
 int mat[2][NMAX][NMAX];
};  //  <-this semicolon

И это должно сделать.

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