Open CharmStrange opened 1 year ago
직접 작성한 해결 예시 코드 :
#include <iostream>
using namespace std;
class Address {
int* object=new int;
public:
int* getAddress() {
cout<<&object<<endl;
return object;
}
~Address() {delete object;}
};
class DoubleAddress : public Address {
int* objectCabin=new int [3];
public:
int* getAddress() {
cout<<&objectCabin<<endl;
return objectCabin;
}
~DoubleAddress() {delete[] objectCabin;}
};
int main() {
Address *A=new Address;
DoubleAddress *B=new DoubleAddress;
A->getAddress();
B->getAddress();
}
위 Address 클래스의 멤버 함수 getAddress() 는 객체의 주소를 반환하게끔 되어 있다. object 를 객체라고 하면 이는 지역 변수로 선언되었고, 이 함수에 인자로 주는 객체는 함수가 종료되면 함수 스택에서 삭제(메모리까지)되기 때문에 객체의 주소를 반환해도 그것은 무효한 값이기 때문에 오류가 발생한다.
이를 해결해주기 위해 객체의 메모리에 대한 설정을 다시 해 준다. 예를 들어 동적 할당, 전역 변수, static, 클래스 멤버 변수.