В вашем коде как минимум три ошибки! Два находятся в вашей функции linearSearch
, где (a) вы не увеличиваете адрес, на который указывает строка в if (val == *nums) {
, и (b) вы go «один за концом» массива в l oop с for (int i = 0; i <= N; i++)
(последний элемент массива размером N
имеет индекс N-1
). Вот исправленная версия:
int linearSearch(int* nums, int N, int val)
{
int count = 0;
for (int i = 0; i < N; i++) {
if (val == *nums++) {
count += 1;
}
}
return count;
}
Третья проблема, возможно, более тонкая. В вашем основном коде вы сначала назначаете указатель arr
адрес, возвращаемый createArray
, здесь:
int* arr = createArray(N);
Но затем, в вашем выводе l oop, вы изменяете (увеличиваете) значение по этому адресу:
cout << *arr++ << " " << endl;
Итак, когда вы позже выполните эту строку linearSearch(arr, N, 1);
, значение arr
будет неправильно - и вы получите неопределенное поведение, пытаясь получить доступ недопустимая память.
Я бы предложил использовать индекс массива в вашем выводе l oop, например:
for (int i = 0; i < N; i++) {
cout << arr[i] << " " << endl;
}
Не стесняйтесь просить дальнейших разъяснений и / или объяснение.