Первая ошибка здесь:
(*nNumArray <= &nNumArray[nSize-1])
Имя самой переменной массива считается указателем в C, поэтому *nNumArray
представляет ссылкууказателя.
Это должно быть nNumArray
, чтобы он сравнивал адрес.
Вторая ошибка :
Он не будет работать идеальноесли только первая ошибка исправлена.
Операция индекса работает следующим образом:
&nNumArray[nSize-1]
работает так же, как nNumArray + nSize - 1
Таким образом, цикл while может выглядеть следующим образом:
while(nNumArray <= nNumArray + nSize - 1){
nSum += *nNumArray;
nNumArray++;
}
(Это может упростить поиск неправильной информации)
Цикл while будет работать вечно, пока *nNumArray
не получит доступ к int , который находится вне массива, который вызываетошибка сегментации.
Возможно, вы захотите сделать это, используя другой указатель для сравнения с nNumArray + nSize - 1
, и вся функция sumArray
должна выглядеть так:
int sumArray(int nNumArray[], int nSize)
{
int nSum = 0;
int *ptr = nNumArray;
while(ptr <= nNumArray + nSize - 1)
{
nSum += *ptr;
ptr++;
}
return nSum;
}
А теперь этодолжно отлично работать:)