我正在研究一個產生分段錯誤的程序,我不明白爲什麼。如果我從「最低」和「最大」變量中刪除指針聲明並將它們用作無指針整數,則該程序可以正常工作。爲什麼此指針/整數比較會產生分段錯誤?
但是,只要我嘗試使用指針,就會出現問題,並收到分段錯誤。我意識到這可能是一個很容易解決的問題,但我試圖通過查看其他類似問題來了解代碼。我還沒有找到解決我的問題。我也不明白髮生了什麼問題。
這是代碼生成所述問題(鏈接到完整的源是下面):
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
在此先感謝對此事!
爲什麼要使用複雜指針運算,而不是使用數組訪問運算符'[指數]'的? – knittl
@ knittl:這可能是C++的作業,教授正在教他們指針算術。 – 2011-06-22 12:12:46