구현에 따르면 while 루프의 세 번째 반복에서 동일한 메모리 공간을 확보 할 수 있습니다 (두 개 이상의 요소를 비우는 경우 오류가 발생 함).
호선 : 임시 점
template <class T> void List<T>::erase(ListIterator<T> & start, ListIterator<T> & stop)
{
while (start<= stop) {
ListIterator<T> * temp = &start;
Line:1 ++temp;
Line:2 delete start.currentLink;
Line:3 start.currentLink = temp->currentLink;
}
}
는 ListClass A.link = 100 = {A, B, C}, B.link = 101, 102 = C.link
첫번째 반복을 고려
라인 2를 B로 : 당신은 무료로 100
3 호선을 : 당신이 지정 A.link = temp.link (I, E B.link) = 101
2 반복 :
호선 : 온도가 여전히
라인 2를 B로 점 : 당신 무료 101
3 호선 : 당신은 A.link = temp.link (I, E B.link) = (101)를 할당하는 이미
을 해제
3 반복
호선 : 온도는 여전히 같은 이놈의 B
라인 2를 가리키는 : 당신은 무료로 이미 0123을 해제 (101)--- 아마 GDB는 여기에 불만을
쉽게 고쳐 :
template <class T> void List<T>::erase(ListIterator<T> & start, ListIterator<T> & stop)
{
ListIterator<T> * temp = &start;
while (start<= stop) {
++temp;
delete start.currentLink;
start.currentLink = temp->currentLink;
}
}
더 나은 수정 :
template <class T> void List<T>::erase(ListIterator<T> & start, ListIterator<T> & stop)
{
ListIterator<T> * temp = &start;
while (start<= stop) {
delete start.currentLink;
start++;
}
temp->currentLink = start.currentLink;
}
나뿐만 마지막 두 요소가 같은 currentLink이됩니다 삭제 기능에 대한 혼란 스러워요 있지만
(로 당신의 구현에서 추측 할 수있는 한).
희망이 도움이됩니다.
감사합니다. 나는 지금 그것을 얻었고, 내가 이미 풀어 놓았던 메모리에 접근하려고 노력하고 있었다. 이것을 염두에두고 실제로 코드를 디버깅하는 새로운 방법을 보여 줬습니다! – user2881196
당신은 오신 것을 환영합니다. 답변으로 귀하의 질문이 해결되면 대답으로 받아 들여주십시오. – fadedreamz