2012-03-20 2 views
1
char * a = new char[]; 
a[0]='1'; 
delete []a; 

배열 크기를 지정하지 않았지만 실행했을 때 디버그 오류가 발생했습니다. 그러나이 코드를 다음과 같이 쓸 때 :문자 유형 배열을 삭제하십시오

char * a = new char[1]; 
a[0]='1'; 
delete []a; 

그러면 괜찮습니다.

번호를 지정할 때 어떤 본문이 올바르게 실행되는지 알려줄 수 있습니까?

+5

메모리를 할당 할 때 할당 할 할당량을 지정해야합니다. 컴파일 할 때 첫 번째 오류 또는 적어도 경고를주지 않으면 나는 놀라게 될 것입니다. –

+0

@ Joachim : MSVC는 아무런 진단없이 구문을 허용합니다! 나는 꽤 놀랐다. –

답변

3

char * a = new char[];

는 메모리를 할당하지 않습니다. 유효한 진술조차도 아니며 최소한 오류나 경고를 초래해야합니다.

char * a = new char[1];

은 하나의 문자를 수행하고 사용하고 삭제할 수 있습니다 이유입니다. 새 키워드는 할당 할 메모리 양이 필요합니다.

+0

'char * a = new char [];'도 유효하지 않은 문장이다. 메모리 할당 가능성은 알 수 없다. –

+0

@ another.anon.coward- 나는 동의한다. 업데이트 됨. – vidit

+0

업데이트 해 주셔서 감사합니다! 주석에서 지적한대로 g ++은 컴파일 타임 오류를 발생 시키지만 MSVC는이를 수용합니다. –

1

새 키워드를 사용할 때 예약 할 메모리 양을 지정하십시오.

예를 들어, char *a = new char[1];이라고 말하면 1 문자를 저장할 수있는 배열이 필요하다고 말하고있는 것입니다.

게시 한 첫 번째 진술에서 메모리를 예약하지 않으므로 프로그램이 충돌하는 것입니다. 당신이 배열의 크기를 알 필요가 없습니다 삭제를위한 그러나 []

범위 내에서 실시 할 필요가

0

char * a = new char[];

당신은 할당 할 수있는 메모리 양을 말해야한다, 런타임 시스템 배열의 크기가 포인터가 가리키는 아는 a

delete []a;

은 그러나 t을 삭제하는 []을 넣어하는 것을 잊지 마세요 그는 배열.

관련 문제