소멸자에서 문제가 발생합니다. Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)

조회수 2777회

소멸자에서 자꾸 에러가 나는데 저는 xcode를 이용하고 있어서 도저히 어느 부분이 문제인지 모르겠습니다 ㅜㅜ

#include <stdio.h>
#include <iostream>
#include <cstring>

using namespace std;

class Person{
    char* name;
    char* addr;
public:
    Person(const char *name, const char *addr){
        this->name= new char[strlen(name)+1];
        strcpy(this->name,name);
        this->addr= new char[strlen(addr)+1];
        strcpy(this->addr,addr);
        cout<<"Person 객체 생성함("<<name<<")"<<endl;
    }
    ~Person(){
        cout<<"Person 객체 제거함("<<name<<")"<<endl;
        delete [] name;
        delete [] addr;
    }
    void print() const{
        cout<<addr<<"에 사는"<<name<<"입니다."<<endl;
    }

    //이동 생성자 생성
    Person(Person&& human2) : name{human2.name}, addr{human2.addr} {
        human2.name=nullptr;
        human2.addr=nullptr;
        cout<<"Person 이동 완료~"<<endl;
    }
    void print(){
        if((this->name == nullptr)&&(this->addr == nullptr)){
            cout<<"이 데이터 이미 없어쥠"<<endl;
        }
        else{
            cout<<"이름: "<< name <<" 주소: "<< addr <<endl;}
    }
};

int main()
{

        cout<<"C를 D로 이동 생성자 실행"<<endl;
        Person C("김쫀떡","서울특별시");
        Person D = move(C);
        C.print();
        D.print();
        cout<<endl;
} 

<결과값>

Person 객체 생성함(강시루)

C를 D로 이동 생성자 실행

Person 객체 생성함(김쫀떡)

Person 이동 완료~

이 데이터 이미 없어쥠

이름: 김쫀떡 주소: 서울특별시

Person 객체 제거함(김쫀떡)

Person 객체 제거함((lldb) //여기서 Thread 1: EXC_BAD_ACCESS (code=1, address=0x0) 이 오류가 납니다.

nullptr이 문제가 있는것 같은데 뭘까요?

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    에러의 원인은 소멸자가 호출될 때, name이 NULL인 경우에도 cout으로 name이 출력되도록 되어 있기 때문입니다.

    아래처럼 NULL이 아닐때만 delete 하고 출력하도록 바꾸시면 됩니다.

        ~Person() {
            if (name)
            {
                delete[] name;
                cout << "Person 객체 제거함(" << name << ")" << endl;
            }
            if(addr)
                delete[] addr;
        }
    
    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 우와 진짜 이틀을 헤맸는데 구세주세요 감사합니다 ㅜㅜ 얌 냠 2020.11.19 01:50

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)