|
코드를 헷갈리신 것 같습니다.
추가 설명을 드리면..
char *p = "a"; // 이것은 "a"가 위치하는 주소를 포인터 p 에 대입하는 코드
*p = "a"; // 문법 에러
p = "a"; // 역시 "a"가 위치하는 주소를 포인터 p에 대입하는 코드
p = 'a'; // 문법 에러
*p = 'a'; // p가 가리키는 주소의 영역에 'a'를 대입하는 코드
댕글링 포인터에 값을 대입하는 것이기 때문에 논리적으로는 확실히 오류가 맞고,
OS 또는 컴파일러 측면에서 안전성이냐 성능이냐 하는 문제에 따라 익셉션이 발생할 수도 있고 아닐 수도 있습니다.
외랑 님이 쓰신 글 :
: 이경문 님이 쓰신 글 :
: : new, delete를 하니까 아무래도 스택이 아니고 힙 영역 같은데요,
: : 비스무리하게 코딩을 해 봤습니다.
: :
: : char *p = (char*)malloc(1);
: : *p = 'a'; <--- (1)
: : free(p);
: : *p = 'b'; <--- (2)
: :
: : (2)에서 에러(Access Violation Error)가 나지 않네요. 흐미~ -_-;
:
: 위 코드는 당연히 동작하는 코드인게 맞다고 생각되는 걸요..
: p는 포인터변수이고 하나의 동적으로 할당된 포인터를 저장했다가...
: 'a'가 저장된 주소를 저장했고(이러면 동적으로 할당된 주소는 날아가버리겠죠)
: 저장된 주소를 free시키고(동적 할당은 아니지만 가능하겠죠)
: 다시 'b'가 저장된 주소를 대입했으니...
:
: 왜 에러가 나야한다고 하시는 건지.....
|