컨텍스트 : 저는 포인터 주위에 머리를 감 으려고 노력하고 있습니다. 우리는 몇 주 전에 학교에서 그들을 보았고 오늘 연습하는 동안 나는 어리석은 일을 만났습니다. 문제, 그것은 당신에게 매우 간단 할 수 있지만 프로그래밍 경험이 거의 없습니다.
나는 포인터 삭제에 관한 몇 가지 질문을 보았지만 모두 '간단한'포인터가 아닌 클래스 삭제와 관련이있는 것 같습니다 (또는 적절한 용어가 무엇이든간에), 여기에 내가 시도하는 코드가 있습니다. 운영:
#include <iostream>;
using namespace std;
int main() {
int myVar,
*myPointer;
myVar = 8;
myPointer = &myVar;
cout << "delete-ing pointers " << endl;
cout << "Memory address: " << myPointer << endl;
// Seems I can't *just* delete it, as it triggers an error
delete myPointer;
cout << "myPointer: " << myPointer << endl;
// Error: a.out(14399) malloc: *** error for object 0x7fff61e537f4:
// pointer being freed was not allocated
// *** set a breakpoint in malloc_error_break to debug
// Abort trap: 6
// Using the new keyword befor deleting it works, but
// does it really frees up the space?
myPointer = new int;
delete myPointer;
cout << "myPointer: " << myPointer << endl;
// myPointer continues to store a memory address.
// Using NULL before deleting it, seems to work.
myPointer = NULL;
delete myPointer;
cout << "myPointer: " << myPointer << endl;
// myPointer returns 0.
}
그래서 내 질문은 다음과 같습니다.
- 첫 번째 사례가 작동하지 않는 이유는 무엇입니까? 포인터를 사용하고 삭제하는 가장 간단한 사용법은 무엇입니까? 오류는 메모리가 할당되지 않았지만 'cout'이 주소를 반환했다고 말합니다.
- 두 번째 예에서는 오류가 발생하지 않지만 myPointer 값을 cout하면 여전히 메모리 주소가 반환됩니까?
- # 3이 실제로 작동합니까? 나에게 일하는 것 같고 포인터가 더 이상 주소를 저장하지 않습니다. 이것이 포인터를 삭제하는 적절한 방법입니까?
긴 질문에 대해 죄송합니다. 가능한 한 명확하게 만들고 싶었습니다. 다시 말하지만 프로그래밍 경험이 거의 없기 때문에 누군가가 평신도의 용어를 사용하여 대답 할 수 있다면 대단히 감사하겠습니다!
delete
당신 만new
. 포인터를 삭제 한 후 포인터가 NULL로 설정 될 필요도 없습니다. 안전을 원하면 스마트 포인터를 사용하여 메모리를 확보하고 무언가를 잡고 있지 않을 때 액세스하려고하면 오류를 발생시킵니다.