动态内存分配的变量使用指针复制给另一个变量如何释放
问题:
使用new申请了一块空间,然后使用指针给另一个变量,那么该delete哪个变量?
测试代码:(代码来源百度,然后我发现没有delete释放new对象)
cout << "****进行排序****" << endl;
//第一位地址可以存放指示器,从第二位开始保存数据
node *mylist = new node[sizeof(node)];
mylist->data = 0;
mylist->next = NULL;
int len = length(head);
int i = 0;
node * cur = mylist;
node *headcopy = head;
while (len--)
{
//node * newNode = (node *)malloc(sizeof(node));
node *newNode = new node[sizeof(node)];
newNode->data = headcopy->data;
newNode->next = NULL;
cur->next = newNode;
cur = cur->next;
headcopy=headcopy->next;
}
head = insertSort(mylist);
head = del(head, 0);
printL(head);
return 0;
}
我百度看到这么一串代码,原代码是没有写delete的,我私自认为有内存泄露,就自己尝试加上了delete,但是delete newNode这个是没有问题的,但是再delete mylist时,VS提示错误。
因为考虑循环内部的new对象无法delete(对于局部变量,要在所在的模块中delete),于是自己将newNode写在了循环体外。
代码:
cout << "****进行排序****" << endl;
//第一位地址可以存放指示器,从第二位开始保存数据
node *mylist = new node[sizeof(node)];
mylist->data = 0;
mylist->next = NULL;
int len = length(head);
int i = 0;
node * cur = mylist;
node *headcopy = head;
node *newNode = new node[0];
while (len--)
{
//node * newNode = (node *)malloc(sizeof(node));
newNode = new node[sizeof(node)];
newNode->data = headcopy->data;
newNode->next = NULL;
cur->next = newNode;
cur = cur->next;
headcopy = headcopy->next;
}
head = insertSort(mylist);
head = del(head, 0);
printL(head);
if (newNode)
delete[] newNode;
if(mylist)
delete[] mylist;
return 0;
}
附加:
1.如果觉得不好解释请直接添加代码解决方案,我在摸索一下。
2.关于new动态内存分配,我记得之前也看过不要使用指针复制之类的,再去百度找不到了,需要注意容易引起内存泄露的情况也请各位解释一下。(PS:当然使用智能指针比较好,但就怕有的版本不支持嘛QAQ)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
newNode = new node[sizeof(node)];
应该是想每次创建一个节点,但是使用
[]
似乎是搞错了数组的使用
为何需要
node *newNode=new node[0];
?有什么特别用处吗?保存好头指针,释放头指针即可
这是我的完整代码。麻烦你看一下。QAQ