Ошибка: сделать указатель из целого числа в C - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь написать программу переменного тока, которая будет параллельно проверять, отсортирован случайный вектор или нет.

 int isSorted(int size, int array[]) {

 .........
  int *sub_rand_nums = (int *)malloc(sizeof(int) * num_elements_per_proc);

  int orden = isSorted(num_elements_per_proc, sub_rand_nums);

// Gather all partial results to all the processes

  int *sub_ordens = NULL;
  if (my_rank == 0) {
    int  *sub_ordens = (int *)malloc(sizeof(int) * my_size);
  }

if (a == 0) {
    int orden = isSorted(sub_ordens, my_size);
  }




}

Может кто-нибудь помочь решить проблему с моим кодом?Это дает мне ошибку

passing argument 1 of ‘isSorted’ makes integer from pointer without a cast [-Wint-conversion]
      orden = isSorted(sub_ordens, my_size);

и

passing argument 2 of ‘isSorted’ makes pointer from integer without a cast [-Wint-conversion]
      orden = isSorted(sub_ordens, my_size);

1 Ответ

0 голосов
/ 13 мая 2018

Вы объявили int isSorted(int size, int array[]), что говорит о том, что первый аргумент является целым числом. Хотя позже в коде вы указываете int *sub_ordens = NULL;, который делает указатель на целое число, но само по себе оно не является целым числом. Чтобы исправить первую ошибку, вам нужно передать целое число в isSorted () вместо указателя на целое число.

Что касается второй ошибки, вы сделали противоположное тому, что вызвало первую ошибку. int array[] все равно что сказать int *array, но вы передаете int my_size;, которое является целым числом, а не указателем на целое число.

Отойдя от технического аспекта, давайте подумаем об этом как о чем-то более осязаемом. У вас есть два человека, назовем их «Лицо А» и «Лицо Б.». Лицо А держит карточку с номером на ней, Лицо Б указывает на Лицо А, но Лицо Б не знает непосредственно номер, записанный на карточке. Если функция хочет указатель, то вы бы посмотрели на человека B, но если она хочет сам номер, вы бы посмотрели на человека A.

Ваша функция запрашивает число (персона A) в качестве первого параметра и указатель в качестве второго параметра (персона B).

В будущем было бы легче разобраться, если бы ваш код был немного более единообразным в представлении (интервал / стиль), а также если вы удалите части, которые не имеют прямого отношения к вопросу.

...