Я работаю над программой, которая генерирует ошибку сегментации, и я не могу понять, почему. Если я удаляю объявление указателя из «самой низкой» и «самой большой» переменных и использую их как целые числа без указателя, программа работает нормально.
Однако, как только я пытаюсь использовать указатели, возникают проблемы, и я получаю ошибку сегментации. Я понимаю, что это, вероятно, очень простая и хорошо решаемая проблема, но я попытался понять код, рассматривая другие подобные проблемы. Я еще не нашел решение своей проблемы. Также я не понимаю, что происходит не так.
Это код, генерирующий проблему (ссылка на полный исходный код приведена ниже):
cout << "This is the array containing the random numbers:\n";
for(int *i=numbers; i != numbers + arrLength; i++) {
if((*i % 200) == 0 && *i > 200) {
cin.get();
cout << endl;
}
else
cout << *i << ' ';
// Get statistics
// In the continuation of getting, lowest, largest then adding to sum.
// THIS PART IS MAKING SEGMENTATION FAULT.
if(*i < *lowest)
lowest = i;
if(*i > *largest)
largest = i;
sum += *i;
}
Переменная i
указывает на старую ссылку, которая объявляется после ввода пользователя:
cout << "You entered: " << arrLength << "\n\n";
int *numbers = new int[arrLength];
// Fill the array with random numbers
srand(time(NULL));
int x;
int range = 5001;
for(int index=0; index<arrLength; index++){
*(numbers + index) = rand() % range;
x = rand() % 2;
if(x > 0) {
*(numbers + index) = *(numbers + index) * -1;
}
}
Пожалуйста, объясните, почему моя программа не работает и что я делаю неправильно. Как я уже говорил ранее, все работает, кроме:
if(*i < *lowest)
lowest = i;
if(*i > *largest)
largest = i;
Полный источник:
http://pastie.org/2105963
Заранее спасибо по этому вопросу!