3 개의 노드 포인터와 2 개의 정수가 포함 된 노드 클래스가 있습니다. 모든 노드를 new
으로 할당하지만, delete
을 호출하면 정수가 -17891602
으로 설정되고 나머지 코드의 경계 검사가 엉망이됩니다. delete
이 무엇을 할 수 있습니까?내 클래스의 데이터 필드에 가비지 값을 남겨두기 위해 삭제되는 원인은 무엇입니까?
답변
delete
이후에는 더 이상 기억력이 흐려지지 않습니다. 그것을 검사하지 마십시오. 아무 것도하지 마십시오. 그렇게하면 정의되지 않은 행동이 생깁니다. 곧 재사용 될 것입니다.
건배 & HTH. 포인터 필드는 새 값을 얻을 수 있는지
디버그 빌드에 많은 컴파일러를 추가하면 해제하지 않아도되는 물건에 쉽게 액세스 할 수 있도록 해제 된 메모리에 고의로 쓰레기가 작성됩니다. –
yemathum은 노드의 포인터 멤버를 삭제하면 정수 멤버가 변경된다고 말하고있는 것 같습니다. 그는 삭제 된 기억을 (그가 아는 한) 검사하지 않고있다. –
확인합니다. 그것들은 0xfeeefeee와 같은가요? (이것은 16 진수로 -17891602입니다.) 메모리 관리자가 해제 된 메모리를 덮어 쓸 수 있으므로 더 이상 액세스하지 않아도되는 메모리를 읽거나 쓰려고 할 때 크래시 덤프에서 인식하기가 더 쉽습니다.
해제 된 개체를 읽고 경계 검사를 수행하는 경우 정의되지 않은 동작에 의존합니다. 사용 가능한 환경에 대한 문서를 참조하여 해제 된 메모리가 무엇인지 확인하십시오. 너의 범위 검사기는 그것과 협력해야 할 것이다; 일반적인 경우에는 작동한다고 가정 할 수 없습니다.
Linux에서 개발하고 gdb
을 사용하는 경우 watch
명령을 GDB에 사용하여 감시 점을 지정할 수 있습니다. 이렇게하면 덮어 쓴 메모리 위치가 언제인지 파악하는 데 도움이됩니다.
- 1. 데이터 요소가 삭제되는 이유는 무엇입니까?
- 2. Imager 클래스의 scaleX 메소드가 실패하는 원인은 무엇입니까?
- 3. 클래스의 구조체에 모든 변수를 고정 시키거나 클래스에 남겨두기?
- 4. 다른 클래스의 텍스트 필드에 같은 값을 표시하는 방법은 무엇입니까?
- 5. NullPointerException의 원인은 무엇입니까?
- 6. 내 mysqli 연결 기능이 실패하게되는 원인은 무엇입니까?
- 7. UItableView 내 텍스트 필드에 데이터 세트 매핑
- 8. int 가비지 값을 반환합니다.
- 9. 모든 레코드가 삭제되는 이유는 무엇입니까?
- 10. 내 코드에서 컴파일 오류의 원인은 무엇입니까
- 11. NoClassDefFoundError 오류의 원인은 무엇입니까?
- 12. 이 파이썬 예외의 원인은 무엇입니까?
- 13. 내 C++ JNI에서 충돌을 일으키는 원인은 무엇입니까?
- 14. Magento에서 내 등급이 복제되는 원인은 무엇입니까?
- 15. 내 h2 아래에이 추가 공간의 원인은 무엇입니까?
- 16. xd_arbiter.php가 내 액세스 로그를 범람시키는 원인은 무엇입니까?
- 17. Windows Gadgets : 내 가제트가 닫히면 설정이 삭제되는 이유는 무엇입니까?
- 18. 깨진 저장 프로 시저가 삭제되는 이유는 무엇입니까?
- 19. 값을 결합하고 데이터베이스 필드에 삽입
- 20. 'System.IO.IsolatedStorage.IsolatedStorageException'의 원인은 무엇입니까?
- 21. 기본 클래스의 정적 읽기 전용 필드에 할당
- 22. 클래스의 테이블 필드에 대한 정보 보유
- 23. 집합에서 필드에 임의로 값을 할당하는 방법은 무엇입니까?
- 24. 시각화를 위해 데이터 값을 "부드럽게"하는 알고리즘
- 25. CFile 일부 가비지 값을 쓰기.
- 26. 내 WebRole이 절대로 시작하지 못하게 할 수있는 원인은 무엇입니까?
- 27. ENOTCONN 오류의 원인은 무엇입니까?
- 28. 가비지 수집을 위해 연결된 이벤트 처리기 검색
- 29. 텍스트 필드에 여러 값을 표시하는 방법은 무엇입니까?
- 30. 텍스트 필드에 값을 동적으로로드하는 방법은 무엇입니까?
코드를 공유 할 수 있습니까? – Avinash
일부 코드를 보지 않아도 알기가 어렵습니다. 소멸자에 버그가 있습니까? –
메모리 내용을'delete '한 후에 메모리 내용을 확인하는 이유는 무엇입니까? 'delete '를 호출 한 후에 메모리에 액세스하는 것과 같은 실수를 탐지하는 데 도움을주기 위해 의도적으로 특정 쓰레기를 작성합니다. –