최근에 포인터 (또는 적어도 배열)가 메모리가 생성 된 다른 어셈블리에서 삭제 될 수 없다는 것을 발견했습니다 (here). 내가 아는 바로는 포인터는 메모리에있는 다른 변수의 주소 값을 갖는 메모리의 변수입니다. 따라서 포인터의 값 (변수의 주소)을 지우고 다른 어셈블리에서 메모리를 해제 할 수없는 이유는 무엇입니까?어셈블리에서 포인터를 삭제할 수없는 이유는 무엇입니까?
3
A
답변
3
모든 동적 할당은 할당 된 것과 동일한 힙으로 돌아갈 필요가 있습니다. 각 DLL (그리고 나는 assembly
이 DLL에 해당합니다.)은 자체 힙을 가질 수 있으므로 할당 된 것과 동일한 DLL 또는 이상한 것 (예 : 오류 또는 충돌)에서 해제해야합니다.) 일어날 것이다.
다른 두 모듈 (DLL, asemblies)이 같은 힙을 가지고 있다는 것을 알지 못하면 다른 모듈에 할당 된 한 모듈에서 무언가를 해제 할 수 없습니다.
무언가를 힙으로 되 돌리는 요구 사항은 라이브러리 책을 "잘못된"라이브러리로 반환하는 것과 비슷합니다. 라이브러리 원이 라이브러리에서 책을 찾을 수 없을 때 모든 혼란을 야기합니다 "새로운"도서관은 그 책에 대해서 전혀 알지 못한다. 우리가 라이브러리에 갈 때 우리 모두가 이것을했다고 상상해보십시오 ... 힙은 힙의 객체를 "추적"하는 내부 데이터 구조를 포함합니다. 우리가 갑자기 그들이 속하지 않는 곳으로 되돌리기 시작하면, 이상한 일들이 일어날 것입니다.
관련 문제
- 1. 이 양식을 삭제할 수없는 이유는 무엇입니까?
- 2. Xcode 프로젝트에서 파일을 삭제할 수없는 이유는 무엇입니까?
- 3. Cronofy.com으로 기본 이벤트를 삭제할 수없는 이유는 무엇입니까?
- 4. jquery로 파일을 삭제할 수없는 이유는 무엇입니까?
- 5. GDI로 큰 이미지를 삭제할 수없는 이유는 무엇입니까?
- 6. 포인터를 전달하여 정수를 만들 수없는 이유는 무엇입니까?
- 7. 포인터를 참조 할 수없는 이유는 무엇입니까?
- 8. 포인터를 추가 할 수없는 이유는 무엇입니까?
- 9. Java에서 포인터를 사용할 수없는 이유는 무엇입니까?
- 10. C에서 포인터를 가리키는 포인터를 초기화하고 선언 할 수없는 이유는 무엇입니까?
- 11. 삭제할 수없는 관계는 무엇입니까?
- 12. 어셈블리에서 구조체 멤버 포인터를 만드는 방법은 무엇입니까?
- 13. 동일한 어셈블리에서 UserControl의 Name 특성을 사용할 수없는 이유는 무엇입니까?
- 14. 포인터를 사용하는 이유는 무엇입니까?
- 15. PHP 데몬의 하위 프로세스에서 파일을 삭제할 수없는 이유는 무엇입니까?
- 16. Windows에서 exes 및로드 된 dll을 삭제할 수없는 이유는 무엇입니까?
- 17. 관련 객체가있는 모델 인스턴스를 삭제할 수없는 이유는 무엇입니까?
- 18. C1ZipFile을 사용한 후에이 파일을 삭제할 수없는 이유는 무엇입니까?
- 19. Excel에서 시트에서이 성가신 드롭 다운을 삭제할 수없는 이유는 무엇입니까?
- 20. Metro 스타일 앱의 코드에서 만든 파일을 삭제할 수없는 이유는 무엇입니까?
- 21. 이 쿼리에서 다른 열이없는 열을 삭제할 수없는 이유는 무엇입니까?
- 22. rank() 분석 함수를 사용하여 테이블의 중복을 삭제할 수없는 이유는 무엇입니까?
- 23. 로컬 xib를 삭제할 수없는 이유는 무엇입니까? 스크린 샷을 참조하십시오.
- 24. DROP CONSTRAINT 명령으로 제약 조건을 삭제할 수없는 이유는 무엇입니까?
- 25. OO 설정에서 반복되는 동안 목록 요소를 삭제할 수없는 이유는 무엇입니까?
- 26. 목록을 반복 할 때 현재 요소를 삭제할 수없는 이유는 무엇입니까?
- 27. 몽구스 모델의 개체 속성을 삭제할 수없는 이유는 무엇입니까?
- 28. 내 프로그램이 Win7에서 만든 파일을 삭제할 수없는 이유는 무엇입니까?
- 29. 내 도로 목록에서 도로를 삭제할 수없는 이유는 무엇입니까?
- 30. dev 도구 콘솔에서이 쿠키를 삭제할 수없는 이유는 무엇입니까?
어셈블리를 무엇이라고 부릅니까? 아마도 번역 단위와 같을까요? –
여기서 '어셈블리'를 사용하지만 라이브러리 또는 DLL을 의미 할 가능성이 있다고 생각합니다. 어쨌든,'new'와'delete'의 기본 구현은 DLL/라이브러리에 의해 사용되는 런타임 사이에 달라질 수 있습니다. 이는 혼합 및 매칭시 손상을 일으킬 수 있습니다. – Joe
나의 무지를 용서해. 닷넷에서 C++로 왔고 어셈블리와 라이브러리를 동의어로 사용했다. (실제로 나는 그 차이를 잘 모른다.) @ 조,'new'와'delete'의 구현이 다르게하지 않습니까? 문제가있는 곳을 예로들 수 있습니까? – JMCF125