Итак, я писал программу, которая запрашивает у пользователя другой ввод.
Затем он создает массив вне основной функции, используя mallo c, выделяя память в зависимости от ввода пользователя.
Затем массив заполняется случайно сгенерированными числами (эта часть фактически работает, я проверил ее в небольшой программе.
При компиляции программы я получаю эти предупреждения
m0. c: 40: 15: предупреждение: несовместимое преобразование целочисленного значения в указатель, передающее 'int' параметру типа 'int *'; remove * [-Wint-translation] fillArray ( array, arraylength, lowerLimit, upperLimit); ^ ~~~~~ m0. c: 18: 20: примечание: передача аргумента параметру здесь int fillArray (int [], int, int, int);
^ m0. c: 41: 19: предупреждение: несовместимое целочисленное преобразование в указатель, передающее 'int' параметру типа 'int *'; remove * [-Wint-преобразование] search_number (массив , длина массива); ^ ~~~~ ~ m0. c: 21: 25: примечание: передача аргумента параметру здесь void search_number (int , int); ^
относится к строке 40 fillArray(*array, arraylength, lowerLimit, upperLimit);
и строке 41 `search_number (* array, arraylength).
Я не понимаю предупреждений, шаблон использования массива как * массив работал раньше (я создал другую программу, в которой не было ввода или выделения памяти из-за переменных, объявленных как const
).
Вот как это выглядит при запуске:
Сколько значений вы хотите?
12
Нижний предел случайных чисел:
20
Верхний предел случайных чисел:
33 Ошибка сегментации: 11
Я исследовал определение ошибки сегментации, и оно должно быть связано с неправильным выделением памяти.
Я также, возможно, неправильно использую указатели, но я не понимаю источник моей ошибки, так как раньше я использовал подобный синтаксис в своем коде.
Вот как я выделил память для массива (с ранее определенным пользовательским вводом в качестве параметра.
int* init_array(int arraylength)
{
int *array = malloc ((arraylength) * (sizeof (int)));
return array;
}
С объявлением MAX_INT
как фиксированной переменной #define
это раньше не было проблемой, этот код
void search_number (int* array)
{
int number = input ();
int counter = 0;
output(array);
for (int i=0; i<MAX_INT; i++)
{
if ((*(array+i))==number)
{
counter++;
}
}
printf ("\nThe number %d occurs %d times.", number, counter);
}
дает мне желаемый результат.