Возможные причины ошибки сегментации во время компиляции - PullRequest
0 голосов
/ 17 марта 2019

Проблема:

Моя программа работает, но не успешно. Возвращает ошибку сегментации. Где может быть ошибка или как я могу решить эту проблему?

Код:

#include<stdio.h>
#include<stdlib.h>
int main ()
{
  int *arr, i, j, n;
  printf ("Input the Size");
  scanf ("%d", n);
  arr=(int*)malloc(n*sizeof(int));
  for (i = 0; i < n, i++;)
  {
    *(arr + i) = i;
  }
  for (i = 0; i < n, i++;)
  {
    printf ("%d\n", *(arr + i));
  }
return 0;
}

1 Ответ

1 голос
/ 17 марта 2019

Измените это:

scanf ("%d", n);

на это:

scanf ("%d", &n);

, поскольку scanf( const char * format, ...) ожидает указатель в качестве своего параметра.


Более того, измените это:

for (i = 0; i < n, i++;)

на это:

for (i = 0; i < n; i++)

, поскольку обычный синтаксис цикла:

for (init; условие); прирост)

То же самое для второго цикла for: for (i = 0; i < n, i++;), который должен быть for (i = 0; i < n; i++)


Вы можете разрешить вашему компилятору предупреждать вас об этом:Передача флагов, поддерживающих компиляцию, например Wall для GCC (Компилировать так: gcc prog.c -Wall).Тогда вы получите такие предупреждения:

prog.c: In function 'main':
prog.c:7:12: warning: format '%d' expects argument of type 'int *', but argument 2 has type 'int' [-Wformat=]
    7 |   scanf ("%d", n);
      |           ~^   ~
      |            |   |
      |            |   int
      |            int *
prog.c:9:20: warning: left-hand operand of comma expression has no effect [-Wunused-value]
    9 |   for (i = 0; i < n, i++;)
      |                    ^
prog.c:13:20: warning: left-hand operand of comma expression has no effect [-Wunused-value]
   13 |   for (i = 0; i < n, i++;)
      |                    ^
prog.c:5:16: warning: unused variable 'j' [-Wunused-variable]
    5 |   int *arr, i, j, n;
      |                ^
prog.c:7:3: warning: 'n' is used uninitialized in this function [-Wuninitialized]
    7 |   scanf ("%d", n);
      |   ^~~~~~~~~~~~~~~
...