我目前正在编写C中的LinkedList实现。我遇到了以下问题:variable 'currentNode' set but not used.
我真的不明白这一点。我正在使用currentNode变量!
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
struct node {
int val;
struct node * next;
};
int main()
{
struct node root;
root.val = 0;
root.next = NULL;
struct node currentNode;
currentNode = root;
int i;
for (i = 0; i < 10; ++i)
{
struct node newNode;
newNode.val = i;
currentNode.next = &newNode;
currentNode = newNode;
}
return 0;
}
答案 0 :(得分:5)
您永远不会正在阅读 currentNode
变量。如果删除了提及该变量的所有行,则程序将完全相同。
(这确实是一个有用的警告:在您的情况下,可能是为了构建一个包含十个元素的列表,它指向代码中的致命错误,这意味着实际代码不执行任何操作。)
答案 1 :(得分:1)
首先,您应该提到仅当您使用-Wall
或具体-Wunused-but-set-variable
时才会出现此警告。
其次,gcc
对usage
的定义是从变量中读取,而不是赋值给变量。
答案 2 :(得分:0)
我发现了另一个问题。
#include <stdio.h>
#include <stdlib.h>
struct node {
int val;
struct node * next;
};
int main()
{
struct node root;
root.val = 0;
root.next = NULL;
struct node currentNode;
currentNode = root;
// ....
int i;
for (i = 0; i < 10; ++i)
{
// newNode is a temporary value,
// its life time end before the next cycle
// u should new it
struct node newNode;
newNode.val = i;
currentNode.next = &newNode;
currentNode = newNode;
}
// ...maybe like this
int i;
for (i = 0; i < 10; ++i)
{
struct node* pNewNode = (struct node*)malloc(siof(struct node));
pNewNode->val = i;
currentNode.next = pNewNode;
currentNode = *pNewNode;
}
// free node
// ...
return 0;
}