초딩으로써 오류가 있을지도 모르겟지만

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[]의 결과가 다를 확률이 희박합니다. 그러나, 잘못된 결과를 가져올 가능성이 존재하기에 명시해도 좋습니다.