2016-01-20 2 views
0

iam пытается использовать простой связанный список в C, но у меня есть некоторые проблемы с ним. Я создал STRUCT узелнеожиданное поведение связанного списка

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

и писал в основном следующий код

struct node *root; 
struct node *conductor; 

root = (struct node *)malloc(sizeof(struct node)); 
root->next = 0; 
conductor = root;  

root->value = 1; 

if ((root->value) == 1) 
    LED_GREEN = 1; 
//LED_GREEN = 1; 

Я бегу это на встроенной системе и просто сравнить значение корневого узла. Я бы ожидал, светодиод продолжается, но это не так. У кого-то появилась идея, почему это работает не так, как ожидалось?

+1

Что такое 'LED_GREEN'? Также [прочитайте это] (http://stackoverflow.com/a/605858/1983495). И что произойдет, если вы не используете 'if'? –

+0

root-> next = 0; неправильно. Он должен указывать на действительное место памяти – JerryGoyal

+1

@JerryGoyal Как это неправильно? Вот как вы инициализируете первый узел связанным списком. – Lundin

ответ

0

@ xy36 является правильным, и эта ошибка не может быть воспроизведена с отправленным кодом. Но, если вам нужен список, вы можете использовать приведенный ниже код. Я немного улучшил свой код. О var LED_GREEN, если вы хотите изменить его значение, я предлагаю вам изменить код внутри функции addNode. Если вы используете щит с надписью, например arduino, просто проверьте соединения проводов и не забудьте использовать команду «digitalWrite (pin, value);», чтобы изменить значение вождя.

Удачи.

#include <stdio.h> 
#include <stdlib.h> 

struct node{ 
    int ID; 
    int value; 
    struct node *next; 
}; 

int LED_GREEN = 0; 

struct node * addNode(struct node *conductor, int value){ 
    struct node * newNode; 
    newNode = (struct node *)malloc(sizeof(struct node)); 
    newNode->value = value; 
    newNode->ID = conductor->ID + 1; 
    conductor->next = newNode; 
    newNode->next = NULL;  
    printf("Node added.\n"); 
    return newNode; 
} 

void printList(struct node *root){ 
    struct node *conductor = NULL; 
    conductor = root; 

    while(conductor){ 
     printf("Node[%d] value: %d. \n",conductor->ID, conductor->value); 
     conductor = conductor->next; 
    } 
    return; 
} 

int main() 
{ 
    struct node *root =NULL; 
    struct node *conductor = NULL; 

    if(!root){ 
     root = (struct node *)malloc(sizeof(struct node)); 
     root->next = 0; 
     conductor = root;  
     root->value = 1; 
     root->ID = 0; 
    } 

    conductor = addNode(conductor, 3); 
    conductor = addNode(conductor, 5); 
    conductor = addNode(conductor, 7); 
    conductor = addNode(conductor, 11); 
    conductor = addNode(conductor, 13); 

    printList(root); 
    return 0; 
} 
2

Я сам решил проблему, но, возможно, полезен для подобных проблем, когда я отправляю решение. Проблема была решена путем изменения размера размера кучи в вариантах проекта моей среды разработки. Размер был установлен в 0, поэтому malloc не смог выделить память.

+0

И это должно заставить вас помнить ВСЕГДА, чтобы проверить возвращаемое значение ' malloc' - Держу пари, что он вернул NULL, когда размер кучи был 0? –

+0

, конечно, это было ;-) – xy36

+0

Но я получил некоторую помощь от поддержки IDE. Обычно возникает ошибка связи с отсутствующим размером кучи, но это не так. В любом случае спасибо за помощь! – xy36

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