c++ new char[] 후에 해제하면 메모리 뻑 납니다.

ikpil의 이미지

#include <iostream>
 
int main( void )
{
	char* p = new char[];
	*p = 3;
	delete[] p;
 
	return 0;
}

이 코드로 컴파일 하면, 런타임에 뻑이 납니다.

질문
new char[] 는 몇 바이트를 할당하나요?
왜 delete[] 할 때 뻑 날까요?

klara의 이미지

저게 컴파일이 된다는게 놀랍네요. 참고로 g++에선 컴파일시에 에러가 뜨네요.
아마 VC++의 문제혹은 VC++확장이 아닐까 생각합니다.

Scarecrow의 이미지

VC++은 메모리 관련 오류는 오류인 부분에서 바로 뜨지 않고
어떻게 어떻게 잘(?) 돌아가는거 같더군요...

그러다가 나중에 빵!!

mg2000의 이미지

상당부분이 할당한 메모리보다 더 썼을때 그러더라고요.

Scarecrow의 이미지

마치

char* p = malloc();
free(p);

가 왜 안되는지 물어보는 느낌이군요...
terzeron의 이미지

딱 꼬집어 답을 드리자면,
몇 바이트를 할당하는지는 프로그래머가 정하는 겁니다.
char* p = new char[숫자];
이렇게 적어야 되는 거죠.

[ ]처럼 숫자를 적지 않아도 되는 경우는
char buf[ ] = "hello";
처럼 정확하게 필요한 메모리 공간의 크기를 계산할 수 있을때나 생략 가능합니다.

ikpil의 이미지

MSVC 2005 에서 정상 컴파일 되지만, 런타임에 뻑납니다.
MSVC 2008 도 마찬가지 입니다.