Проблема в вашем вызове printarray
:
printarray(2, 2, array);
, где вы сообщаете функции, что массив имеет две строки и два столбца - но это не так, он имеет три строки и три колонны. Компилятор предполагает, что вы не говорите ему неправду!
Вы должны вызвать вашу функцию с правильным значением параметра length
, так как это используется компилятором для определения того, как чтобы вычислить смещения для элемента array[i][j]
.
Если вы хотите только затем напечатать part этого массива, вы должны указать количество столбцов и строк для печати в качестве дополнительных параметров для ваша функция, например:
void printarray(int height, int length, int nrows, int ncols, triple array[][length])
{
if (nrows > height) nrows = height;
if (ncols > width) ncols = width; // Prevent error conditions!
for (int i = 0; i < nrows; i++) {
for (int j = 0; j < ncols; j++) {
printf("red score at array[%i][%i] = %i\n", i, j, array[i][j].red);
}
}
}
, а затем вызовите функцию следующим образом:
printarray(3, 3, 2, 2, array);
Примечание: вам также не хватает прототипа функции для printarray
перед его использованием, что будет ошибкой на некоторых компиляторах (но только предупреждением на других); добавьте эту строку где-нибудь перед вашей main
функцией:
void printarray(int height, int length, int nrows, int ncols, triple array[][length]);