c++ delete[] 에러 입니다 ㅠㅠ


#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) 입니다..

  • 2016년 10월 08일에 수정됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.
  • 2016년 10월 08일에 작성됨
    c++

조회수 197


1 답변


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

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

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

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

  • 2016년 10월 08일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close