段错误(Segmentation fault)通常是由于访问了未分配的内存或者访问了不可访问的内存区域导致的。
以下是可能导致段错误的代码示例:
#include
using namespace std;
int findPairs(int arr[], int n, int target) {
int count = 0;
for (int i = 0; i <= n; i++) {
for (int j = i + 1; j < n; j++) {
if (arr[i] + arr[j] == target) {
count++;
}
}
}
return count;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int target = 6;
int count = findPairs(arr, 5, target);
cout << "Pairs count: " << count << endl;
return 0;
}
这段代码的问题在于,外层循环的终止条件 i <= n
是错误的。数组索引是从 0 到 n-1,因此应该是 i < n
。这会导致 i
的值超过数组边界,访问到未分配的内存,进而导致段错误。
要解决这个问题,只需将外层循环的终止条件修改为 i < n
即可:
int findPairs(int arr[], int n, int target) {
int count = 0;
for (int i = 0; i < n; i++) { // 修改终止条件为 i < n
for (int j = i + 1; j < n; j++) {
if (arr[i] + arr[j] == target) {
count++;
}
}
}
return count;
}
这样修改后的代码就不会再出现段错误了。