Ошибка сегментации с помощью fopen [duplicate]

Первая часть проста:

@property
def x(self): ...

совпадает с

def x(self): ...
x = property(x)
  • , которая, в свою очередь, является упрощенным синтаксисом для создания property с помощью только геттера.

Следующим шагом будет расширение этого свойства с помощью setter и deleter. И это происходит с помощью соответствующих методов:

@x.setter
def x(self, value): ...

возвращает новое свойство, которое наследует все, начиная с старого x и заданного установщика.

x.deleter работает одинаково .

-3
задан Mat 17 May 2014 в 11:10
поделиться

2 ответа

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

Поэтому, скорее всего, это указывает на неверный адрес памяти.

Вот один из способов исправить:

int *a = malloc(sizeof(int));
...
free(a); // when done using it

Вот еще один способ исправить:

int b;
int *a = &b;

Но я предлагаю вам выполнить следующие шаги, чтобы сделать его более простым и чистым. .


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

int *a;

К этому:

int a;

И это:

fscanf(input,"%d\n",a);

К этому:

fscanf(input,"%d\n",&a);
3
ответ дан barak manos 22 August 2018 в 10:21
поделиться

Когда вы пишете:

int *a;

, тогда a является указателем , но в настоящее время он не указывает нигде.

Перед отправкой на fscanf вы должны указать правильное хранилище для int.

Например, внутри main():

int b;
a = &b;
fscanf(input,"%d\n",a);

Кроме того, ваш цикл неверен. Почти всегда ошибка использования feof (не говоря уже о качестве условия цикла). Вместо этого вы должны проверить фактическую операцию чтения. В вашем случае:

while ( 1 == fscanf(input,"%d\n",a) )
{
     printf("%d\n", a);
}
2
ответ дан M.M 22 August 2018 в 10:21
поделиться
  • 1
    Комментарий первого предложения неверен. Переменная, объявленная с помощью int *a;, инициализируется нулевым указателем, если это переменная static , например переменная, определенная в глобальной области действия модуля (то есть вне любой функции). Однако в обсуждаемом здесь случае переменная объявляется внутри функции main(), поэтому она является автоматической переменной и ее не нужно инициализировать. Следовательно, он указывает в любом случае, скорее всего, в какую-то несуществующую или, по крайней мере, недоступную область памяти, таким образом, чтение в указанную область вызывает исключение сегментации. – CiaPan 17 May 2014 в 11:23
  • 2
    извините, я, должно быть, неправильно понял код OP, я думал, что int *a; был до main(). – M.M 17 May 2014 в 11:33
Другие вопросы по тегам:

Похожие вопросы: