c++ delete[] 에러 입니다 ㅠㅠ
조회수 4409회
#include <iostream>
using namespace std;
int main(){
int* arr = new int[10];
for (int i=-9; i<=0; i++){
arr[i]=i;
}
delete [](arr);
system("pause");
}
아래 코드에서 왜 배열 첨자를 음수로 했을떄 delete[]
여기서 에러가 발생 하는 걸까요? 배열을 음수로 인덱싱 하는 것은 문제가 안되는것을 발견 했습니다(arr[-1]
등 출력이 잘되었습니다) 그리고 arr
의 index
시작을 0부터 하면은 문제없이 delete[]
가 됩니다 이유가 무엇일까요?ㅠㅠ 에러 내용은 _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
입니다..
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
첨부한 예에서 배열 첨자를 음수로 해서 동작했다면 운이 좋아서 동작한 경우라고 해야할 것 같습니다.
C/C++은 배열 첨자에 대한 검사를 하지 않기 때문에 할 수 있습니다만, 만약 음수로 인덱스하였을 때, 프로세스에서 해당 주소에 대한 메모리가 할당되지 않은 경우, 메모리 접근 에러를 내며 종료합니다.
delete[] 는 new[]통해서 할당한 메모리를 할당해제하는 구문입니다. 따라서 할당한적이 없는 arr에서 0보다 작은 인덱스에 대응하는 위치에 대한 메모리를 할당해제하려고 하기 때문에 에러가 발생할 수 밖에 없습니다.
실험한 내용은 사용하는 시스템에따라서 될 수도있고 안될 수도 있는 내용인데, 이러한 프로그램은 정상적인 프로그램이 될 수 없습니다.
댓글 입력