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] 등 출력이 잘되었습니다) 그리고 arrindex시작을 0부터 하면은 문제없이 delete[] 가 됩니다 이유가 무엇일까요?ㅠㅠ 에러 내용은 _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 입니다..

1 답변

  • 첨부한 예에서 배열 첨자를 음수로 해서 동작했다면 운이 좋아서 동작한 경우라고 해야할 것 같습니다.

    C/C++은 배열 첨자에 대한 검사를 하지 않기 때문에 할 수 있습니다만, 만약 음수로 인덱스하였을 때, 프로세스에서 해당 주소에 대한 메모리가 할당되지 않은 경우, 메모리 접근 에러를 내며 종료합니다.

    delete[] 는 new[]통해서 할당한 메모리를 할당해제하는 구문입니다. 따라서 할당한적이 없는 arr에서 0보다 작은 인덱스에 대응하는 위치에 대한 메모리를 할당해제하려고 하기 때문에 에러가 발생할 수 밖에 없습니다.

    실험한 내용은 사용하는 시스템에따라서 될 수도있고 안될 수도 있는 내용인데, 이러한 프로그램은 정상적인 프로그램이 될 수 없습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)