Ошибка сегментации при компиляции кода c указателями - PullRequest
0 голосов
/ 27 февраля 2019
int main()
{
  long array[1000], *maximum, size, c, location = 1;

  printf("Enter the number of elements in array\n");
  scanf("%ld", &size);

  printf("Enter %ld integers\n", size);

  for ( c = 0 ; c < size ; c++ )
    scanf("%ld", &array[c]);

   maximum  = array;
  *maximum = *array;

  for (c = 1; c < size; c++)
  {
    if (*(array+c) > *maximum)
    {
       *maximum = *(array+c);
       location = c+1;
    }
  }

  printf("Maximum element is present at location number %ld and it's value is %ld.\n", location, *maximum);
  return 0;
}

В этом коде, чтобы найти максимальное число в массиве, без 'Maximum = array', я получаю ошибку сегментации. В чем может быть причина?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

maximum определяется как указатель на long.Если вы не установите этот указатель на указатель на что-то, вы вызываете неопределенное поведение , читая и разыменовывая недопустимый указатель.

Кроме того, поскольку вы указываете maximum на первый элементмассив, каждый раз, когда вы обновляете *maximum, вы изменяете первое значение в массиве, что, вероятно, не то, что вам нужно.

На самом деле maximum не нужно указатель, поэтому изменитеопределение на long и измените ссылки соответственно.

int main()
{
  long array[1000], maximum, size, c, location = 1;

  printf("Enter the number of elements in array\n");
  scanf("%ld", &size);

  printf("Enter %ld integers\n", size);

  for ( c = 0 ; c < size ; c++ )
    scanf("%ld", &array[c]);

   maximum = array[0];

  for (c = 1; c < size; c++)
  {
    if (array[c]) > maximum)
    {
       maximum = array[c]);
       location = c+1;
    }
  }

  printf("Maximum element is present at location number %ld and it's value is %ld.\n", location, maximum);
  return 0;

}
0 голосов
/ 27 февраля 2019

Причина, по которой вы получаете ошибку сегментации, заключается в том, что вы пытаетесь отменить ссылку на указатель NULL, когда maximum не установлен.

Правильный путь (как указано в вашем коде):

   maximum  = array;  // set the pointer to 'array'
  *maximum = *array;  // then de-reference.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...