Ошибка сегментации: правильно ли я использую mallo c для размера массива? - PullRequest
0 голосов
/ 31 января 2020

Итак, я писал программу, которая запрашивает у пользователя другой ввод.

Затем он создает массив вне основной функции, используя 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);
}

дает мне желаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...