struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
for(int i=0;i<10;i++)
{
ListNode l1(i);
//此处将l1添加到链表中
}
这样的写法却会导致最后的链表结果全为9,也就是说虽然每一次都是将指针指向l1但是循环中l1从来没有被释放过。。。这是为什么?
我尝试过malloc和new。都可以在当前循环结束释放,只有上述方法不行。。。。
求解。。。
天蓬老师2017-04-17 15:23:58
지역 변수는 명령문 블록을 떠난 후 스택에서 튀어나옵니다. ListNode l1(i)
이는 매번 해제됩니다. 이는 실제로 충돌이 발생하지 않는 이유는 논리가 간단하기 때문입니다. 지난번에 공개되었던 기억 공간은 다음 ListNode l1(i)
으로 다시 채워지는데, 결국 9
의 다음은 자신을 가리킨다.
new와 malloc은 스택에 메모리를 할당하지 않으므로 자동으로 해제되지 않습니다.