1463번 - 1로 만들기
안녕하세요 이 문제를 풀긴 풀었는데 궁금한게 생겨서 질문드립니다.
정적할당과 동적할당에 관한 문제인데요 C++에서 다음과 같이 선언시 바로 문제가 푸는것이 가능하였습니다.
그러나 다음과 같이 메모리를 동적할당 할시 메모리 초과가 떳습니다.
int main(void)
{
cin >> N;int *dp = new int[N];
(중간과정 생략)
delete[] dp;
}
왜 이러한 현상이 발생하는 지 혹시 아시는분 질문 부탁드려도 될까요? 궁금합니다.
또한 c 나 c++에선 인자로 입력받은 배열선언이 불가능하다고 햇는데 다음과 같이 실행해도 문제 없는 것 같은데 왜그런지 설명 부탁드려도 될까요?
cin>> N;
int dp[N]; // 동적 배열?
new int[N]을 하면 배열의 크기가 N이기 때문에 인덱스는 N-1까지만 있습니다. 그런데 이 코드는 dp[N]에 접근하기 때문에 배열의 범위를 넘어서게 되고, 이는 undefined behavior이기 때문에 무슨 일이 벌어질지 모릅니다.
변수의 값으로 배열의 크기를 정하는 것은 C++ 표준에서는 안 되지만 GCC 확장으로 지원되기 때문에 BOJ에서는 사용할 수 있습니다.
아 그렇군요 자세하고 빠른 설명 감사합니다!!
댓글을 작성하려면 로그인해야 합니다.
dlwoabsdk 3년 전
안녕하세요 이 문제를 풀긴 풀었는데 궁금한게 생겨서 질문드립니다.
정적할당과 동적할당에 관한 문제인데요 C++에서 다음과 같이 선언시 바로 문제가 푸는것이 가능하였습니다.
그러나 다음과 같이 메모리를 동적할당 할시 메모리 초과가 떳습니다.
int main(void)
{
cin >> N;
int *dp = new int[N];
(중간과정 생략)
delete[] dp;
}
왜 이러한 현상이 발생하는 지 혹시 아시는분 질문 부탁드려도 될까요? 궁금합니다.
또한 c 나 c++에선 인자로 입력받은 배열선언이 불가능하다고 햇는데 다음과 같이 실행해도 문제 없는 것 같은데 왜그런지 설명 부탁드려도 될까요?
cin>> N;
int dp[N]; // 동적 배열?