문제가 어려울 수록 단순화하는게 중요합니다.
Code: Select all
class lala
{
int* m_Type;
public:
init()
{
for (int i=0; i<2; i++)
{
for (int k=0; k<200;k++)
m_Type[i+k] = new int;
}
}
init2()
{
for (int i=0; i<2; i++)
{
m_Type = new int[200];
}
}
};
init()은 딱보면 알 수 있듯이 할당 되지도 않은 영역에 int를 할당하려고 하고 있습니다. 말이 안되는 거죠.
init2()는 포인터 변수에 200개의 인트형 메모리를 잡는 것입니다. 아무런 문제가 없죠.
만약 init()이 정상적으로 작동을 하게 하려면,
Code: Select all
template<typename>
class lala
{
typename typedef Ty Type;
typedef std::vector<Type> lalaContType;
lalaContType vecData;
public:
lala( void )
{
vecData.clear();
}
lala( size_t Col, size_t Row )
{
vecData.reserve( Col*Row );
for (int i=0; i<Col; ++i )
{
for (int k=0; k<Row;k++)
vecData.insert( i*k, new Type );
}
}
lala( size_t Cnt, size_t Size )
{
vecData.reserve( Cnt*Size );
for (int i=0; i<Cnt; ++i )
{
vecData.insert( i, new int );
}
}
};
가 되어야 합니다. 위의 코드는 걍 생각나는대로 막 적은 거라서 안돌아가는게 정상이구요. 이해만 하시길 바래요.
그리고 여담입니다만, 위의 코드는 쓰레기입니다. 말도 안되는 코드죠. 하지 말아야 할 짓을 많이 하고 있습니다. 리절브를 안하고 리사이즈하면 될 것을 보여주기(?) 위해서 하고 있고요. 문제는 생성자에서 메모리 할당을 하기 때문에 위험부담도 큽니다. 이런 코드는 되도록이면 쓰시지 말기를 바래요.
그리고 한가지 충고드리고 싶은 것은 너무 한 곳에 집중해서 파고들지 마세요. 너무 깊이 있는 학습보다는 우선은 넘기고 이해를 하고 다음으로 넘어간 뒤, 점차적으로 파고드는 것이 더 좋을 듯 합니다. 그럼..^^