&arr[N]
относится к ячейке памяти (или lvalue), которая содержит N-й элемент (вне индекса !!!) в массиве.
Этот код вызывает Неопределенное поведение (UB).
Итак, вы фактически не передавали весь массив своим функциям, вы просто пытались передать N-ый элемент этого массива ... Подробнее об этом выражении здесь .
Измените это:
fillArray(n, &arr[N]);
outArray(n, &arr[N]);
на это:
fillArray(n, arr);
outArray(n, arr);
Live Demo
Проблема заключалась в том, что с вашим кодом n
был поврежден, содержащий значение мусора после вызова функции fillArray
.В результате, когда была вызвана функция outArray
, n
имел значение мусора, что приводило к неконтролируемому циклу for, который заканчивался зацикливанием гораздо дальше, чем пределы вашего массива, в конечном итоге получая доступ к памяти, которой вы не владели, что приводит к ошибке сегментации.
Не причина вашей проблемы, но я предлагаю вам сделать scanf("%f", &num);
в вашей функции fillArray
(после объявления num
как float
, конечно), так как вы хотите заполнить массив с плавающей точкой.