인프런 커뮤니티 질문&답변
배열 메모리 크기 할당 오류
작성
·
623
0
질문있습니다.
26:30 쯤에서 궁금한 것이 생겼습니다.
저는 지금까지
#include <iostream>
using namespace std;
int main(){
int num;
cin >> num;
int arry[num];
return 0;
}
이런식으로 변수 값을 입력 받은 후
그 크기만큼 배열을 할당했습니다.
오류가 안 생겼던 것 같은데요...
홍정모님 강의에서는 오류가 발생한다고 해서요.
런타임 이전에 크기가 할당 되어야 한다는 말씀을 하셔서요
답변 1
0
오잉 저는 이렇게 배열 크기는 상수로 사용하여야 한다고 컴파일 에러가 바로 발생합니다.
저는 비주얼 스튜디오 2019 를 사용중인데 혹시 IDE 어떤걸 쓰고 계신가요?
https://www.onlinegdb.com/online_c++_compiler
웹 c++ 컴파일러를 사용해보니 여기선 질문자님처럼 컴파일 에러를 발생시키지 않고 정상 작동하네요.
https://stackoverflow.com/questions/30499228/c-array-size-must-be-an-const-expression
정적 배열의 메모리는 컴파일 타임 할당이 되야하기 때문에 배열의 크기는 반드시 컴파일 타임에 결정되어야 합니다. 즉, 실행한 이후에 배열의 크기를 결정할 수는 없다는 것입니다. 상수는 컴파일 타임에 결정되는 데이터이기 떄문에 정적 배열의 크기는 상수여야 합니다. 위 링크에 따르면 이것이 C++ 표준 내용이며 C++ 표준을 따르지 않는 컴파일러들이 간혹 있는 것 같은데 그게 제가 앞서 언급한 웹 컴파일러와 질문자님이 사용중이신 컴파일러가 그런 것 같네요. 표준을 따르지 않는 컴파일러를 사용하고 계실 가능성이 큽니다.
교수님의 말씀이 맞습니다. C++ 표준에 따르면 배열의 크기는 런타임에 정해질 수 없는게 맞고 표준을 잘 따르고 있는 컴파일러를 쓰고 있다면 오류가 발생해야해요!
저도 몰라서 찾아보니까 mingw 이 gcc 를 사용할 수 있도록 해주는 유틸리티라네요! 즉, dev c++ 은 gcc 컴파일러를 쓴다고 할 수 있겠습니다. vs2019 는 자체 컴파일러라고 하네요!
컴파일러마다 차이가 있긴 하지만 배열의 크기는 컴파일에 결정되야 하는 것이 표준이구나~ 정도로 알아두시고 dev c++ 게속 사용하시면 될 것 같아요 :)






dev c++를 사용하고 있습니다. gcc 컴파일러라고 지금까지 생각했는데요. 다시보니 MinGW 컴파일러라는 말도 있네요! 정확히 어떤 컴파일러인지는 잘 모르겠습니다. 그것도 좀 알려주실 수 있을까요?