[C++]구조체 내부의 크기가 1인 배열
글쓴이: wafe / 작성시간: 화, 2005/02/22 - 4:04오후
struct Sta { ... int array[1]; };
이런 구조체를 사용할 때는 malloc을 써서 struct Sta * 형으로 동적으로 만들어 주어야 하나요?
Sta *a = (Sta *a)malloc(sizeof Sta + 배열크기);
이렇게 말이지요. new로는 불가능할 것 같은데... C++에서 malloc을 쓰자니 왠지 꺼림칙합니다.
그리고 이런 배열을 뭐라고 불러야 하는 건가요? "가변 길이 배열"하고는 좀 다른 것 같아서요.
Forums:
Re: [C++]구조체 내부의 크기가 1인 배열
구조체 내부에서
크기가 1인 배열이라기 보다는
가변길이의 배열을 쓰고 싶으신거죠
그럼
array 를 pointer 로 선언하시고
Sta 의 생성자에서
라고 하시면 될텐데요
소멸자에서 delete [] 하시는거 잊지 마시고.
그리고
이런 식으로 하면 되지 않을까요?
굳이 크기 1인 배열을 쓰셔야 하나요?
개념없는 초딩들은 좋은 말로 할때 DC나 웃대가서 놀아라. 응?
그런 형태를 쓰는 방식을 지정하는 정확한 용어는 없습니다만 대개 "str
그런 형태를 쓰는 방식을 지정하는 정확한 용어는 없습니다만 대개 "struct hack"이라고 부르기도 합니다. 새로운 C 표준인 C99에서는 flexible array member라는 것을 도입해서 위 문제를 쉽게 해결할 수 있도록 도와줍니다.
http://www.cinsk.org/cfaqs/html/node13.html
에서 11.11 section을 참고하기 바랍니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
Re: [C++]구조체 내부의 크기가 1인 배열
네 가변길이 배열을 쓰고 싶습니다.
제가 새로 만드려고 하는 것은 아니고 만들어진 라이브러리를 쓰고있기 때문입니다. Win32 GDI에도 저런 구조체가 참 많더군요. :(
포인터를 쓰는게 더 좋은데 말이에요. ^^
Heejoon Lee
template를 써보세요.
그런 가변길이 클래스를 new로 할당받고 싶으시다면..
// 배열의 길이가 가변적인 템플릿 선언
template < class T, int _buf_siz_ > class VarBufFmt {
public
int m_iTop;
T m_varBuf[ _buf_siz_ ];
};
// char형 10개짜리 배열을 가지는 클래스형 포인터 선언
VarBufFmt <char, 10> *pBuf10;
// char형 10개짜리 배열을 가지는 클래스형 객체 할당
pBuf10 = new VarBufFmt <char, 10>;
님ㅎ 즐~
C의 API와 맞춰야 한다면 별로 뾰족한 수는 없겠군요. 다만 wrapp
C의 API와 맞춰야 한다면 별로 뾰족한 수는 없겠군요. 다만 wrapping 클래스를
만들어 좀 편하게 쓸 수는 있겠습니다. 소멸, 복사, 대입도 적절히 만드시고요.
type casting을 사용하세요.
질문을 제대로 이해 했는지 모르지만 보통 이렇게 많이 씁니다.
...그런데 질문한 지 많이 지나서
Re: [C++]구조체 내부의 크기가 1인 배열
포인터를 쓰는게 더 좋다고 볼 수는 없습니다.
두번 할당할 것을 한번에 할당하면 조금이라도 메모리는 적게 듭니다.해제할때도 더 편하구요. 또한 멤버에 접근하는데 배열 멤버인 경우 포인터 참조가 한번이면 됩니다. 포인터 멤버였다면 두번 참조해야 되겠죠.
이 기법은 C 에서 자주사용되고, 유용한 기법이며, C++ 클래스와new로는 할 수 없는 방법입니다. 위에서 템플릿으로 예제를 주셨지만 배열 크기나 타입에 따라 각기 다른 클래스가 되기 때문에 동일한 기법들을 적용할 수 없습니다.
위에서 C99 표준을 말씀해 주셨고, GNU C 에서는 구조체 내에 0
길이 배열을 지원하기도 합니다.
Orion Project : http://orionids.org
댓글 달기