我试图在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正在发生,但事实并非如此。任何人都有一个想法,为什么这不能按预期工作?
答案 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;
}