드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
게시물ID : computer_13994짧은주소 복사하기
작성자 : 마약파리소녀★
추천 : 0
조회수 : 473회
댓글수 : 9개
등록시간 : 2011/08/11 13:16:37
#include<iostream>
using namespace std;
class CArray
{
public:
CArray(int c = 1) {
mCount = c;
mArr = new int [mCount];
for(int i = 0; i < mCount; i++)
mArr[i] = i;
}
~CArray() { delete [] mArr; }
void print();
private:
int *mArr;
int mCount;
};
int main(void)
{
CArray *arr1 = new CArray(3);
CArray arr2(*arr1);
CArray arr3;
arr3 = *arr1;
arr1->print();
arr2.print();
arr3.print();
delete arr1;
return 0;
}
void CArray::print()
{
for(int i = 0; i < mCount; i++)
cout << mArr[i] << " ";
cout << endl;
}
가지고 있는 C++ 교재에 나온 문제 입니다
위 코드를 보고 문제점을 생각해보라는 것인데요....
교재에 답같은건 없네요;;;
제 생각에는...
*arr1은 동적할당
arr2는 *arr1으로 복사 생성
arr3은 디폴트 생성뒤 *arr1로 대입 연산
따라서 *arr1, arr2, arr3 모두 같은 메모리(CPArray(3))를 가리키고 있다고 생각됩니다
그런데 delete arr1으로 메모리를 해제하면
arr1의 파괴자가 동작하면서 mArr의 메모리 해제
arr2와 arr3의 파괴자도 동작 하여야하지만
arr1이 메모리 해제를 하였으므로
arr2와 arr3의 객체가 참조하는 곳이 없음
arr2와 arr3의 파괴자가 동작항 mArr의 메모리를 해제하여야 하지만
참조할 수가 없어서 메모리를 해제 하지 못할것 같습니다
그리고 처음에 arr3이 디폴트로 생성되면서 할당 받은 mArr이 해제가 되지 않은 체로
다시 mArr이 생성된게 문제 같습니다.....
쓰고 나니.. 조금 이상 한것 같기도 하네요;;;;
워낙 설명을 못해서;;;
누구 설명좀 해주시분 ㅠㅠ
댓글 분란 또는 분쟁 때문에
전체 댓글이 블라인드 처리되었습니다.
새로운 댓글이 없습니다.