dlwoabsdk   3년 전

안녕하세요 이 문제를 풀긴 풀었는데 궁금한게 생겨서 질문드립니다.

정적할당과 동적할당에 관한 문제인데요 C++에서 다음과 같이 선언시 바로 문제가 푸는것이 가능하였습니다. 

그러나 다음과 같이 메모리를 동적할당 할시 메모리 초과가 떳습니다.

int main(void)

{

cin >> N;
int *dp = new int[N];

(중간과정 생략)

delete[] dp;

}

왜 이러한 현상이 발생하는 지 혹시 아시는분 질문 부탁드려도 될까요? 궁금합니다.

또한 c 나 c++에선 인자로 입력받은 배열선언이 불가능하다고 햇는데 다음과 같이 실행해도 문제 없는 것 같은데 왜그런지 설명 부탁드려도 될까요?

cin>> N;

int dp[N]; // 동적 배열?

djm03178   3년 전

new int[N]을 하면 배열의 크기가 N이기 때문에 인덱스는 N-1까지만 있습니다. 그런데 이 코드는 dp[N]에 접근하기 때문에 배열의 범위를 넘어서게 되고, 이는 undefined behavior이기 때문에 무슨 일이 벌어질지 모릅니다.

변수의 값으로 배열의 크기를 정하는 것은 C++ 표준에서는 안 되지만 GCC 확장으로 지원되기 때문에 BOJ에서는 사용할 수 있습니다.

dlwoabsdk   3년 전

아 그렇군요 자세하고 빠른 설명 감사합니다!!

댓글을 작성하려면 로그인해야 합니다.