C++,

2013-05-17 4 views
-3

내가 가진 (삭제 사용) 멤버 ** 객체를 삭제 어떻게 **object (**personnel) 내부 구성원 (구성) 또 다른 목적은, 그 **personnel 포인트 메모리를 해제하고 (다른 **temp을 가리 원하는대로 personnel=temp), delete**personnel을 보내고 그냥 personnel=temp 프로그램이 잘 실행,하지만 난 delete **personnel에 노력하고 있다면 모든 것을 망쳐 놨하고 난 항상 오류가 발생을하지 않고 "_Block_Type_Is_Valid (pHead->nBlockUse)는"C++,

(나는 소멸자 (그리고 virtual 기본 소멸자가) , 그들 중 일부는 아무 일도하지 않지만 여전히 오류가 발생합니다). 그것도 바로 delete에게이며,

(내가 뭔가 잘못하고 있습니까이에 몇 일)

을 잃었) (나는 모든 각도에서 delete personnel[i], delete []personnel[i] 등을 시도했다), 그리고 만약 그렇다면, 어떻게 할 내가한다?

이 편집 :

if(personnel!=NULL) 
    { 
     for(i=0;i<numberofemployees;i++) 
     { **/*what to do here*/** 

    delete []this->personnel[i]; 

     } 
     /*delete personnel;*/ 

    } 
    personnel=temp; 
    numberofemployees++; 

    } 

** 직원이이 클래스의 멤버 인, 은 (직원 ** 직원, 직원은 다른 파생 클래스의 기본 클래스, 직원의 모든 종류의, 내가 다형성을 사용하고있다), 이 함수는 단지 직원을 추가하는 것입니다, 그 기능이 길기 때문에 제가 그 부분을 집어 넣었습니다. 삭제하지 않으면 모든 것이 잘 작동하는 것 같아요. 오류,

+1

삭제 주소와 함께 작동합니다. 그래서 뭔가를 지우고 싶다면 주소를 전달하십시오. 'ptr ** '는 다른 주소를 저장하는 메모리 위치에 대한 주소입니다. 어느 쪽을 삭제 하시겠습니까? – RandyGaul

+1

코드 샘플을 제공 할 수 있습니까? – edtheprogrammerguy

답변

1

나는 그 질문을 이해하고 있는지 잘 모르겠습니다. 그러나 당신이있는 경우에, 나의 이해에 기반 : delete foo 또는 delete *bar (그 중 하나전화)에

struct Foo { ... }; 
Foo* foo = new Foo; 
Foo** bar = &foo; 

은 그런 경우에만 필요합니다.

하지만 일반적으로 그런 것들을 추적하고 싶지 않으므로 std::shared_ptr 또는 std::unique_ptr과 같은 스마트 포인터를 사용하는 것이 좋습니다.