2016-05-02 4 views
-2

Моя программа сохраняет нечетные и четные числа отдельно в связанных списках среди заданных первых n чисел последовательности Фибоначчи. Его в C.Связанный список Ошибка выполнения последовательности Фибоначчи

При распределении узлов Head я получаю ошибку времени выполнения, Stopped Responding. Я не могу найти проблему. Это может быть даже о чем-то другом, я не уверен.

Заранее спасибо

struct odd{ 
     int value; 
     struct odd * next; 
}; 

struct even{ 
     int value; 
     struct even * next; 
}; 

struct list{ 

     struct odd * oHead; 
     struct odd * oCurrent; 

     struct even * eHead; 
     struct even * eCurrent; 
}; 

typedef struct list * List; 

void init(int i, List fib){ // allocates the linked list according to first i numbers of the Fibonacci sequence 

    int evenCount; 
    int oddCount; 
    int j; 

    /*Calculates the count of even and odd numbers */ 

    for(j = 0 ; j < evenCount ; j++){ 
      if(j == 0){ 
        **fib->eHead->next = (struct even*)malloc(sizeof(struct even));** 
        fib->eCurrent = fib->eHead->next; 
      } 
      else{ 
       fib->eCurrent->next = (struct even*)malloc(sizeof(struct even)); 
       fib->eCurrent = fib->eCurrent->next; 
      } 
    } 
    for(j = 0 ; j < oddCount ; j++){ 
      if(j == 0){ 
        **fib->oHead->next = (struct odd*)malloc(sizeof(struct odd));** 
        fib->oCurrent = fib->oHead->next; 

      } 
      else{ 
       fib->oCurrent->next = (struct odd*)malloc(sizeof(struct odd)); 
       fib->oCurrent = fib->oCurrent->next; 
      } 
    } 
} 

main(){ 
    List fib 
    init(15,fib); 
} 
+1

Я не вижу никаких ассигнований .. –

+1

'fib' - неинициализированный указатель. – kaylum

+0

@EugeneSh: Посмотрите сложнее, хотя, как было указано другими, их недостаточно. –

ответ

0

Я не знаю, почему вы не установите evenCount и oddCount, но если они больше 0, то эта линия

fib->eHead 

является разыменования указателя это NULL. Следующая строка не инициализации

List fib; 

Это объявление указателя на объект List, который не был инициализирован еще. Если ЬурейеЕ был ...

typedef struct list List; 

Было бы инициализировать пустой-структуру в стеке, но это не то, что вы делаете. Если вы изменяете объявление типа вы все еще используете указатели в этом

struct list{ 
     struct odd * oHead; 
     struct odd * oCurrent; 
     struct even * eHead; 
     struct even * eCurrent; 
}; 

так же проблема, вы не можете не разыменования любой из них, пока они выделены.

Что касается evenCount и oddCount, вы должны явно установить их в функции или у вас есть неопределенное поведение.

Если объект с автоматической продолжительностью хранения не инициализирован явно, его значение является неопределенным.

Если объект, который имеет длительность статического хранения не инициализируется явно, то:

, если он имеет тип указателя, он инициализируется нулевым указателем; если он имеет арифметический тип, он инициализируется нулем (положительным или без знака); если это совокупность, каждый элемент инициализируется (рекурсивно) в соответствии с этими правилами; если это isaionion, первый названный член является инициализирован (рекурсивно) в соответствии с этими правилами.

+0

Они установлены в части I, оммитированной и замененной/* Вычисляет подсчет четных и нечетных чисел * /, хотя я должен был быть более ясным. – Sangratura

+0

Тогда проблема заключается в том, что ваш список не инициализирован до его использования. – Harry

+0

Я не понимаю ваш комментарий 'typedef struct List List; '. Это определение типа, а не инициализация. – Harry

Смежные вопросы