초딩으로써 오류가 있을지도 모르겟지만
delete p <- p가 가리키는 주소에 있는 메모리를 해체
delete[] p <- p ~ (p가 가리키는 주소 에 있는 메모리보다 번지수가 높고 할당된 곳이 아이며 가장 가까운 곳에 있는 주소 - 1)에 있는 메모리 전체 해체
예시:
int *a = new int[100]; -> int 100개의 배열을 동적 할당, a[0]~a[99]까지 할당됩니다.
delete a; -> a가 가리키는 주소에 있는 메모리(*a = a[0]) 해체
delete[] a+1; -> a+ 1 ~ (a+1이 가리키는 주소(a + 1)보다 번지수가 높고((a + 2) ~ FFFFFFFF), 할당된 곳이 아니며 가장 가까운 곳에 있는(a[100]) 주소 - 1) (a[1] ~ a[99])에 있는 메모리 전체 해체 -> a[1] ~ a[99] 해체
int *b = new int; -> int 1개 할당
delete b; -> b가 가리키는 주소에 있는 메모리(*b = b[0]) 해체
delete b[]; -> b가 가리키는 주소(b) ~ (b보다 번지수가 높고 할당된 곳이 아니며 가장 가까운 곳에 있는 주소 - 1)에 있는 메모리 전체 해체 -> b[0] ~ b[0] 해체 = b[0] 해체
따라서, delete와 delete[]는 다릅니다.
할당된 크기가 1인 변수(int) 등은 delete, delete[]의 결과가 다를 확률이 희박합니다. 그러나, 잘못된 결과를 가져올 가능성이 존재하기에 명시해도 좋습니다.
네..? 초딩>?
내가 궁금했던것의 의견은 마지막 단 3줄이네
지금 delete[] arr+1 이 된다는거여?
nyangd/되지 않나요? 테스트해볼게요. 저가 초딩이라...
nyangd/안되네옄. 괄호 씌웟더니 에러 폭발
nyangd/arr+1이 아니라 arr이면 될듯요
초등학생이 이정도 프로그래밍 지식이면 엄청난거다. 위에 설명은 써놓긴했는데 메모리 할당과 접근 그리고 포인터 연산 좀만 공부하면 잘할듯