如何解决为什么在C ++在Mac上中使用&指向Struct s不正确?
我使用此代码将Node添加到链表的尾部。 但是它运行不正确。
truct Node {
int value;
Node *next;
Node() {
}
Node(int i):value(i),next(NULL){
}
};
void addNode(Node **list,int i) {
if (!list ||!*list) {
return;
}
Node *n = *list;
Node *cur = n;
Node *tailP = NULL;
while(cur) {
tailP = cur;
cur = cur->next;
}
Node iNode = Node(i); // I first create a Node struct.
Node *node = &iNode;
tailP->next = node;
}
将功能更改为以下内容后,现在是真的。
void addNode(Node **list,int i) {
if (!list ||!*list) {
return;
}
Node *n = *list;
Node *cur = n;
Node *tailP = NULL;
while(cur) {
tailP = cur;
cur = cur->next;
}
Node *node = new Node(i); // Now I use new to create a Struct Node.
tailP->next = node;
}
所以我想知道发生了什么事?感谢您的关注。
解决方法
Node iNode = Node(i);
是非静态局部变量,并且其生存期在从函数addNode
返回时结束,因此,即使从函数返回后,也要存储其指向使用的列表的指针是不合适的。
另一方面,Node *node = new Node(i);
在堆上创建对象。堆上的对象在返回后仍然存在,适合在这里使用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。