我目前正在用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;
}
您从未读取 currentNode
变量。如果您删除所有提到该变量的行,您的程序将完全相同。
(这确实是一个有用的警告:在你的例子中,它可能是为了构建一个包含十个元素的列表,它指出你的代码中有一个致命的错误,这意味着实际的代码什么也不做。)
首先,您可能应该提到,只有在使用-Wall
或-Wunused-but-set-variable
时才会出现此警告。
第二,gcc
对usage
的定义是从一个变量中读取,而不是赋值给一个变量。
我发现了另一个问题。
#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;
}