打印链表错误。怎么了?
print linked list error. What's wrong?
struct Node
{
int data;
struct Node *next;
};
Node *AppendNode(Node *head, int data) {
Node *ptr = head;
struct Node node = {data, ptr->next};
head->next = &node;
return head;
}
void PrintNode(Node *head) {
Node *ptr = head;
while (ptr != 0) {
printf("%d ", ptr->data);
ptr = ptr->next;
}
}
int main() {
Node node = {1 , 0};
Node* head = &node;
head = AppendNode(head, 2);
PrintNode(head);
return 0;
}
输出为 (1,3830( 而不是 (1,2(。检查调试器 在此步骤中,我看到节点值从 2 更改为 3830 ptr = ptr->next
;在 PrintNode 中。对不起,我是C++新手。
这是
错误的:
Node *AppendNode(Node *head, int data) {
Node *ptr = head;
struct Node node = {data, ptr->next};
head->next = &node;
return head;
}
您将指向局部堆栈变量的指针插入到链表中。一旦你的函数返回,&node
引用的内存很快就会被破坏。
此外,在作业泄露(和丢失(之前head->next
之前指向的任何内容。
更好:
Node* AppendNode(Node *head, int data)
{
Node* newNode = new Node;
newNode->data = data;
newNode->next = head;
head = newNode;
return head;
}
但从技术上讲,上述内容是"预置"到列表中,而不是像您的函数签名所暗示的那样"附加"。 也许这就是你想要的,但如果不是,那就是我留给你的练习。:)
正如Bo的另一个答案所提到的,当你完成列表时,不要忘记在你的节点上调用"删除",以避免内存泄漏。
您在AppendNode
有一个本地Node
。一旦您离开函数,该节点就消失了。
如果必须动态创建节点,请使用 new Node
.只是不要忘记稍后delete
节点。
相关文章:
- 不断收到相同的错误...怎么了?C++
- 我在贪吃蛇游戏中收到了错误代码 -1073741571
- C++ 犰狳库中的sort_index()函数给出了错误的结果
- 纹理单位重叠?渲染了错误的纹理
- 由于签名差异,调用了错误的子类函数
- srand() 输出了错误的值
- C++:使用类在向量中搜索特定元素时,我得到了错误的结果
- 编译器没有显示错误,但我没有得到任何输出.怎么了?
- 我正在尝试传递DMA数组及其大小作为参数,但它给出了错误
- 错误:未定义对 .. 的引用.怎么了
- 我在C++文件中的简单代码块上有 2 个错误。错误 C2059:语法错误:"?"。第二智能感知:预期表达式。怎么了?
- 程序为某些条目提供了错误的输出!怎么了?
- 我在以下括号验证程序中得到错误的输出?怎么了?
- 错误:请求非类类型的 int* 的成员'insert'?怎么了?
- 尝试对结构向量进行排序时,我在算法文件中收到 20 个错误。我不知道怎么了?
- 编译器错误"character constant too long for its type" 。怎么了?
- 打印链表错误。怎么了?
- 我没有任何编译错误,但我的代码不起作用。怎么了?
- 我的主函数中有一些 "expected primary-expression before 'int' " 类型的错误。怎么了?
- 怎么了?-组合编译错误(与家庭+人类的例子)