포인터를 삭제하는 데 문제가 있습니다. 나는 불법적으로 컴파일하는 어떤 것도하지 않는다고 생각하지만, 아마도 나는 그렇습니다. 누군가 내 논리의 결함을 설명 할 수 있다면 고맙겠습니다. 아래에 함수가 충분히 도움이되기를 바랄뿐입니다. 코드 전체가 필요하다면 알려주세요. 추가하겠습니다!임시 포인터를 삭제할 수 없습니까?
아래는 내가 만든 링크 된 목록에서 사물함을 제거하는 기능입니다. 나는 생각할 수있는 모든 사건을 다루기 위해 최선을 다했습니다. 문제는 내가 삭제하려는 사물함의 메모리를 실제로 할당 해제하려고 할 때 발생합니다. 내가 잠긴 것을 참조하는 임시 변수를 삭제하려고 시도한 행은 코드가 포함되어 있기 때문에 주석 처리되어 있습니다. 분명히, 그들없이, 나는 내가 원하는 것처럼 사물함을 삭제할 수 없다.
int SelfStorageList::removeLockersOverdue() {
int lockersDeleted = 0;
if (isEmpty()) {
return 0;
}
if (head->objLocker.isRentOverdue && head==tail) { //If that was the only locker, the tail needs to be updated to = head = 0
delete head;
head = tail = 0;
return ++lockersDeleted;
}
LockerNode *prev = head;
LockerNode *curr = head->next;
while (curr != 0) {
if((curr == tail) && curr->objLocker.isRentOverdue) { //If the current locker is tail and needs deleting
LockerNode *temp = curr;
curr = prev;
//delete temp;
lockersDeleted++;
}
if(prev->objLocker.isRentOverdue) { //General case: Previous locker needs deleting
LockerNode *temp = prev;
prev = prev->next;
curr = curr->next;
//delete temp;
lockersDeleted++;
}
else { //Update the pointers if not updated anywhere else
prev = prev->next;
curr = curr->next;
}
}
return lockersDeleted;
}
"포인터"가 있습니까? (끔찍한 말 : p)
실제로 발생하는 오류/동작은 무엇입니까? "코드 분할"은 실제로 도움이되지 않습니다. – tangrs
할 수 있다면 더 많은 도움을 드리 겠지만 기술적으로 오류 메시지가 표시되지는 않습니다. 코드는 힙에 _ASSERTE (_BLOCK_TYPE_IS_VALID (pHead-> nBlockUse))라는 행에 전화를 겁니다. –
'꼬리'가 유지되고 있습니까? 'if (curr == tail)'을 체크하는 대신'if (curr-> next! = 0)'를 체크하는 것이 어떻습니까? – bobobobo