2015-05-22 2 views
-1

У меня проблема с сегментационной ошибкой около 3 часов назад, и я действительно не понимаю, почему. Я пытаюсь назначить память динамически terminos (struct), но я не могу. Я надеюсь, что вы можете помочь мнеПочему возникает ошибка сегментации (вложенные структуры)?

#include<stdio.h> 
    #include<stdlib.h> 
    typedef struct termino 
    { 
     int exponente; 
     float cociente; 
    } termino; 

    typedef struct polinomio 
    { 

    termino* polinomio; 
    int size; 
} polinomio; 

main() 
{ 


int size_; 
    termino* terminos; 
    polinomio *polinomio_; 
    polinomio_ = malloc(sizeof(polinomio)); 
    printf("%d",(sizeof(polinomio_)*2)); 

    printf("Bienvenido al cálculo de operaciones usando 1 polinomio.\n"); 
    printf("Ingrese la cantidad de términos que tendrá el polinomio."); 
    scanf("%d",size_); 
    //assigning memory for terminos. 
    terminos =(termino*) malloc(sizeof(termino) * size_); 
+0

'главный()' -> 'INT основной (аннулируются)' –

+1

C и C++ два разных языка. Кроме того, сейчас звучит подходящее время, чтобы ознакомиться с отладчиком. «У меня есть segfault и не могу понять, почему», без дополнительной информации, это не вопрос. Если вы используете 'gcc', перед продолжением измените свою командную строку на' gcc -Wall -Werror'. Если вы используете Visual Studio **, обратите внимание ** на любые выпуски предупреждений компилятора. Они там не просто так. –

ответ

1

Основной проблемой здесь является

scanf("%d",size_); 

изменение

scanf("%d",&size_); 

потому, scanf() ожидает аргумент типа указатель на данные.

Связанные с C11 стандарта, главы §7.21.6.2, (курсив мой )

d

Соответствует необязательно десятичное целое число, чей формат такой же, как ожидается, для субъектная последовательность функции strtol() со значением 10 для базового аргумента. Соответствующий аргумент должен быть указателем на целое число со знаком.

Кроме того,

  1. Рекомендованный подпись для main() является int main(void).
  2. Исправленный спецификатор формата для sizeof - %zu.
  3. Please do not cast the result of malloc()
Смежные вопросы