链表的意外行为

时间:2016-01-20 11:52:32

标签: c linked-list embedded

我试图在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;

我在嵌入式系统上运行它,只是比较根节点的值。我希望,LED正在发生,但事实并非如此。任何人都有一个想法,为什么这不能按预期工作?

2 个答案:

答案 0 :(得分:2)

我自己解决了这个问题,但是当我发布解决方案时,它可能对类似问题有帮助。通过在IDE的项目选项中更改堆大小来解决问题。大小设置为0,因此malloc无法分配内存。

答案 1 :(得分:0)

@ xy36是正确的,并且发布的代码无法重现此错误。但是,如果您需要列表,可以使用下面的代码。我刚刚改进了你的代码。关于var LED_GREEN,如果你想改变它的值,我建议你改变函数addNode中的代码。如果您使用的是嵌入式电路板,例如arduino,只需检查电线连接,不要忘记使用命令“digitalWrite(pin,value);”来更改led值。

祝你好运。

    #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;
}