Я работаю над проектом, который требует, чтобы я читал пользовательские входы как пары целых чисел, а затем сохранял их в массиве. Итак, я создал функцию, которая делает это. Тем не менее, я почему-то получаю ошибку сегментации каждый раз, когда вводится последний ввод. Вот мой код:Индексирование массива в C возвращает ошибку сегментации
int userInput(int *arrayPtr){
int numberPairs, i, numberElements;
printf("%d", sizeof(int));
printf("How many pairs of integers? ");
scanf("%d", &numberPairs);
numberElements = numberPairs*2;
arrayPtr = malloc((numberElements*sizeof(int)) + 64);
for(i = 0; i < numberElements; i+=2){
int first,second;
printf("\nEnter pair: ");
printf("Before scanf");
scanf("%d %d", &first, &second);
printf("%d", first);
arrayPtr[i] = first;
arrayPtr[i+1] = second;
}
printf("%d", numberPairs);
return numberPairs;
}
Вот как я вызываю функцию:
int main(){
int *arrayPtr, numberPairs;
numberPairs = userInput(arrayPtr);
multiplyPairs(arrayPtr, numberPairs);
free(arrayPtr);
}
В настоящее время я в основном пытаюсь сделать цикл выполнения в полном объеме, но по каким-то причинам всегда seg ошибок на последней итерации. Например, если мой ввод для пар был 1 2, 3 4, 5 6, мой выход был бы 1 3, а затем - сбой (этот вывод относится к заявлению печати в цикле for). Я потратил несколько часов, пытаясь отладить этот код, а также взглянуть на него другими учениками, и я не могу понять, что не так. Если бы вы могли указать мне в правильном направлении, я был бы очень признателен. Благодарю.
UPDATE: Я скопировал и вставил код в новый файл, и он работает по назначению. Спасибо всем, кто рассказал мне о других элементах моего кода, которые были неправильными.
Вы передаете 'int *' в эту функцию, а затем ожидаете, что она укажет на массив, выделенный этой функцией? 'arrayPtr = ...' полностью отделяет 'arrayPtr' от того, что передал вызывающий. – user2357112
Я не передаю никакой информации указателем массива. Я просто объявляю его в своей основной функции, чтобы он имел надлежащий охват. Потому что я использую тот же arrayPtr, что и параметры для других функций. –
Покажите, как вы вызываете функцию. [Читать это] (http://stackoverflow.com/help/mcve). –