问题:
使用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)
这是我的完整代码。麻烦你看一下。QAQ