Ошибка компилятора "expected declaration or statement at end of input" обычно указывает на то, что компилятор достиг конца файла, но ожидал завершения некоторого блока кода, такого как функция, структура или условный оператор. Это часто происходит из-за отсутствия закрывающей фигурной скобки (`}`) или других значащих элементов синтаксиса.
В вашем коде проблема находится в функции `print_arr`. Вы не закрыли фигурную скобку для этой функции. Ниже приведен исправленный блок кода:
```cpp
void print_arr(int** arr_arr){
unsigned int len = sizeof(arr_arr)/sizeof(int*);
for (size_t i = 0; i < len; ++i){
unsigned int len_2 = sizeof(arr_arr[i])/sizeof(int);
for (size_t j = 0; j < len_2; ++j){
printf("%d\n", arr_arr[i][j]);
} // Здесь должна быть скобка для закрытия внутреннего цикла
} // И здесь закрывается функция
}
```
### Дополнительные замечания:
1. В функции `get_array_of_arrays` вы используете переменную `a` в цикле `for`, что может привести к бесконечному циклу. Вместо этого вы должны использовать `i`:
```cpp
for (size_t i = 0; i < a; ++i) {
```
2. В функции `fill_array`, как и в функции `print_arr`, использование `sizeof(arr_arr)` не даст вам правильное значение, так как `arr_arr` является указателем, а не массивом. Для определения длины массива вам нужно передавать его размер в качестве параметра или использовать другой подход.
3. Не забывайте об освобождении динамически выделенной памяти, когда она больше не нужна, чтобы избежать утечек памяти.
Вот некоторые правильные строки кода с исправлениями:
```cpp
int** get_array_of_arrays(unsigned int a){
int** arr_arr = calloc(a, sizeof(int*));
for (size_t i = 0; i < a; ++i) { // исправлено: ++a на ++i
int b;
scanf("%d", &b);
arr_arr[i] = calloc(b, sizeof(int));
}
return arr_arr;
}
void fill_array(int** arr_arr, unsigned int a) { // добавляем параметр a
for (size_t i = 0; i < a; ++i) {
unsigned int len_2;
scanf("%d", &len_2); // считываем длину для второго массива
arr_arr[i] = calloc(len_2, sizeof(int)); // выделяем память
for (size_t j = 0; j < len_2; ++j) {
int filler;
scanf("%d", &filler);
arr_arr[i][j] = filler;
}
}
}
int main(){
int n;
scanf("%d", &n);
int** array_of_arrays = get_array_of_arrays(n);
fill_array(array_of_arrays, n); // заполняем массивы
print_arr(array_of_arrays, n); // нужно будет передать n или размер
// Освобождение памяти после использования
for (size_t i = 0; i < n; ++i) {
free(array_of_arrays[i]);
}
free(array_of_arrays);
}
```
После внесения этих исправлений ваш код должен компилироваться и работать без упомянутой ошибки.