#include <iostream> int main( void ) { char* p = new char[]; *p = 3; delete[] p; return 0; }
이 코드로 컴파일 하면, 런타임에 뻑이 납니다.
질문 new char[] 는 몇 바이트를 할당하나요? 왜 delete[] 할 때 뻑 날까요?
저게 컴파일이 된다는게 놀랍네요. 참고로 g++에선 컴파일시에 에러가 뜨네요. 아마 VC++의 문제혹은 VC++확장이 아닐까 생각합니다.
VC++은 메모리 관련 오류는 오류인 부분에서 바로 뜨지 않고 어떻게 어떻게 잘(?) 돌아가는거 같더군요...
그러다가 나중에 빵!!
상당부분이 할당한 메모리보다 더 썼을때 그러더라고요.
마치
char* p = malloc(); free(p);
딱 꼬집어 답을 드리자면, 몇 바이트를 할당하는지는 프로그래머가 정하는 겁니다.char* p = new char[숫자]; 이렇게 적어야 되는 거죠.
char* p = new char[숫자];
[ ]처럼 숫자를 적지 않아도 되는 경우는char buf[ ] = "hello"; 처럼 정확하게 필요한 메모리 공간의 크기를 계산할 수 있을때나 생략 가능합니다.
char buf[ ] = "hello";
MSVC 2005 에서 정상 컴파일 되지만, 런타임에 뻑납니다. MSVC 2008 도 마찬가지 입니다.
http://www.ikpil.com
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
저게 컴파일이
저게 컴파일이 된다는게 놀랍네요. 참고로 g++에선 컴파일시에 에러가 뜨네요.
아마 VC++의 문제혹은 VC++확장이 아닐까 생각합니다.
VC++은 메모리 관련
VC++은 메모리 관련 오류는 오류인 부분에서 바로 뜨지 않고
어떻게 어떻게 잘(?) 돌아가는거 같더군요...
그러다가 나중에 빵!!
해제하다 뻑나는 경우는....
상당부분이 할당한 메모리보다 더 썼을때 그러더라고요.
마치
마치
가 왜 안되는지 물어보는 느낌이군요...
...
딱 꼬집어 답을 드리자면,
몇 바이트를 할당하는지는 프로그래머가 정하는 겁니다.
char* p = new char[숫자];
이렇게 적어야 되는 거죠.
[ ]처럼 숫자를 적지 않아도 되는 경우는
char buf[ ] = "hello";
처럼 정확하게 필요한 메모리 공간의 크기를 계산할 수 있을때나 생략 가능합니다.
이런 경우를 안썻군요.
MSVC 2005 에서 정상 컴파일 되지만, 런타임에 뻑납니다.
MSVC 2008 도 마찬가지 입니다.
http://www.ikpil.com
댓글 달기