클래스 템플릿에서 타입인수로 메모리 동적할당
글쓴이: dltkddyd / 작성시간: 금, 2013/04/26 - 5:40오후
template <typename targ> DynamicArr<targ>::DynamicArr(size_t cnt) { targ trial='e';//test if(typeof(trial)==S_CHAR) {printf("..... charrrr....%u\n",cnt);}//test (this->elements)=new targ[cnt];//trouble printf("In DynamicArr(size_t cnt)\n");//test this->length=cnt; }
위의 코드 컴파일은 제대로 되는데, 실행시 계속 디버거가 실행됩니다. 여기서 DynamicArr은 클래스 템플릿입니다.
template DynamicArr {
.....
} ;
그리고 이 클래스 템플릿 안에 제일 위에 언급한 생성자가 포함되어 있습니다. 그런데
DynamicArr tmp((size_t)3);
이렇게 해서 객체를 만들면 위의 생성자가 호출되는데, 계속
(this->elements)=new targ[cnt];//trouble
코드 부분에서 디버거가 작동되면서 실행이 중지됩니다. 타입인수에 어떤 문제가 있는 건가요? 타입인수로 동적 메모리 할당이 되게끔 하는 방법좀 알려주세요.
Forums:
가변길이 배열은 c99에서는 지원하는데 c++에서는
가변길이 배열은 c99에서는 지원하는데 c++에서는 지원하지 않아요.
가변길이 배열이라는 것이... 동적할당 아닌가요?
말씀하신 가변길이 배열이라는 것이 아래와 같은 메모리 동적할당이 아닌가요?
char* chs=new char[30];
그렇다면, 되어야 하지 않나요? C++에서 되던데요?
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
동적할당은 인덱스에 변수 언급이 가능한 것으로 아는데요..
int n=30;
char* chs=new char[n];
이런 식으로는 되는데, 가변인수에서 가변길이 선언이 될 때도 있고 안 될 때도 있더군요? 가변길이라서 그런 것은 아닌 것 같은데요.. 이거 정말 헷갈리네요. 그리고 c99라는 것이 C 표준 이전의 C라고 검색되네요. 이런 식의 동적배열은 최신 참고서적에서도 많이 언급되던데요..
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
char* chs=new char[n]; 는 올바른
char* chs=new char[n]; 는 올바른 사용법입니다.
런타임에서 문제가 생긴다면 코드의 다른 부분까지도 살펴봐야 할거 같네요.
사족을 달자면, c99는 1999년에 나온 C표준을 말하는것이고, 가변길이 배열이라 함은 char* chs=new char[n];가 아니라, char chs[n];을 말하는겁니다.
댓글 달기