기초 C 질문.. 함수내에서 메모리 할당(array).
글쓴이: MasterQ / 작성시간: 금, 2003/07/25 - 12:00오전
void foo(int num) { char buf[num]; int i; for (i = 0 ; i < num - 1 ; i++ ) { buf[i]='q'; } buf[num - 1] = '\0'; printf("%s\n", buf); }
실행 잘되구요...
아니. buf[num]가 원래 됐었던 건가요?
이렇게 parameter로 받은 num을 언제부터 malloc쓰지 않고도
이런식으로 선언해서 쓸수 있는지 궁금합니다..
흠!! 지금 쓰는 컴팔러는 gcc 3.2입니다...
기억이 맞다면 예전에는 에러 났었던것 같거든요.....
이렇게 코드를 써도 될까 걱정이네요... 만약 옛 컴팔러에서 안된다면 피하고 싶어서요...
새로 바뀐 표준인가요? (C99)
Forums:
..
참고하세요~
http://bbs.kldp.org/viewtopic.php?t=167
Re: 기초 C 질문.. 함수내에서 메모리 할당(array).
C99 표준 맞습니다. GCC 구버전 뿐만 아니라, 웬만한 상용 컴파일러에서도 아직 지원하지 않는 경우가 많습니다. 뭐 아직 C++98도 100% 완벽히 지원하는 컴파일러도 없는데요.
다른 개발 환경으로의 이식성을 생각한다면 C99 표준에만 있는 문법은 쓰지 마세요. 반면에 C++98은 웬만한 환경에선 다 된다고 보시면 됩니다.
Re: 기초 C 질문.. 함수내에서 메모리 할당(array).
http://www.comeaucomputing.com
음... 개인적인 친분은 있지만 절대 광고 목적은 아닙니다.
그럼...
--
Jun, Woong (woong at gmail.com)
http://www.woong.org
Re: 기초 C 질문.. 함수내에서 메모리 할당(array).
GCC 구버젼에서 이미 gcc 자체 확장으로 지원하던 기능입니다. 최소한 gcc 2.95에서 지원하고 있습니다.
char buf[num]; 하고 char *buf = ma
char buf[num];
하고
char *buf = malloc(sizoef(char)*num);
그럼 위의 두 식은 실질적으로 같은 건가요?
[quote="mushim"]char buf[num]; 하고
기타 등등...
휴가 후 이런 저런 밀린 일을 정리 하느라 바빠서 간단한 주석이 있는 코드
만 남깁니다. 이해 바랍니다.
--
Jun, Woong (woong at gmail.com)
http://www.woong.org
친절한 답변 감사합니다.추가로 궁금한것은 함수 안쪽에서만 사용이
친절한 답변 감사합니다.
추가로 궁금한것은 함수 안쪽에서만 사용이 가능하겠죠?
다음과 같이는 쓸 수 없을것 같네요.
*) 컴파일 해보니, 함수안쪽만 사용가능 하군요. 다음과 같이 에러를 주는군요.
[quote="mushim"]char buf[num]; 하고
variable length array는 그 scope를 벗어나면 자동으로 할당을 해제합니다. 비슷한 함수로 BSD 계열에서 지원되는 alloca()가 있죠.
또, malloc은 heap에, VLA와 alloca는 stack에 잡힌다는 구현의 차이도 있고요.
댓글 달기