저같은 경우에 free후 NULL로 항상 초기화 합니다.
(메모리 잡는것도 특별한 경우가 아니면 대체적으로
malloc보다는 calloc을 사용하죠. )
뭐 상황에 따라 다르겠지만 말입니다.
버릇들여 놓으면 안하는 경우 괜히 불안하더군요.
메모리 다쓰고 free후엔 포인터에 있는 값은 이제 쓰레기값입니다.
메소드나 함수가 더이상 그 포인터를 절대로 쓰지 않는다면
NULL로 초기화하지 않아도 상관없겠죠.
하지만... 코드를 수정하면서 해당 포인터를 재사용하거나 하는
여러가지 경우로 복잡해지기 시작하면 NULL초기화 하지않아
여러가지 오류를 발생할 여지가 있습니다. 보통 포인터 사용전에
assert 걸어서 검사합니다만 NULL처리 되있지않은 쓰레기값이면
아무런 의미가 없게되고요.
물론 이런상황이 안되도록 리팩토링하는것이 가장 중요하겠습니다만...
잠깐 옆길로 새서...
C나 C++인 경우엔 free 함수를 쓰기때문에 가끔 생각하게 되는
문제입니다만, 저같이 델파이를 주로 사용하는 경우엔 이미
FreeAndNil 함수를 사용해서 알아서 포인터에 nil ( NULL 과 비슷한 의미임) 처리를 해주기때문에 고민안하고 좋더군요.
습관의 차이이지만 저같은 경우에도 메모리를 free하거나 포인터를 선언시 반드시 NULL로 초기화를 합니다.
free를 한 후에 NULL로 초기화를 안하면 해당 포인터에는 아직도 예전에 쓰던 포인터 값이 존재하는데 이는 이미 운영체제에게 반납된 메모리이므로 다음번에 해당 메모리를 엑세스 할 시에 대부분 프로그램이 죽습니다.
NULL로 초기화를 하면 NULL포인터 참조를 해서 죽겠지만.. 그렇지 않고 해제한 메모리를 엑세스 하다가 죽으면 이를 찾기는 매우 힘들거든요..
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
저같은 경우에 free후 NULL로 초기화 합니다.
저같은 경우에 free후 NULL로 항상 초기화 합니다.
(메모리 잡는것도 특별한 경우가 아니면 대체적으로
malloc보다는 calloc을 사용하죠. )
뭐 상황에 따라 다르겠지만 말입니다.
버릇들여 놓으면 안하는 경우 괜히 불안하더군요.
메모리 다쓰고 free후엔 포인터에 있는 값은 이제 쓰레기값입니다.
메소드나 함수가 더이상 그 포인터를 절대로 쓰지 않는다면
NULL로 초기화하지 않아도 상관없겠죠.
하지만... 코드를 수정하면서 해당 포인터를 재사용하거나 하는
여러가지 경우로 복잡해지기 시작하면 NULL초기화 하지않아
여러가지 오류를 발생할 여지가 있습니다. 보통 포인터 사용전에
assert 걸어서 검사합니다만 NULL처리 되있지않은 쓰레기값이면
아무런 의미가 없게되고요.
물론 이런상황이 안되도록 리팩토링하는것이 가장 중요하겠습니다만...
잠깐 옆길로 새서...
C나 C++인 경우엔 free 함수를 쓰기때문에 가끔 생각하게 되는
문제입니다만, 저같이 델파이를 주로 사용하는 경우엔 이미
FreeAndNil 함수를 사용해서 알아서 포인터에 nil ( NULL 과 비슷한 의미임) 처리를 해주기때문에 고민안하고 좋더군요.
free후에 NULL로 초기화하는 것은 물론,선언시에도 NULL로 초
free후에 NULL로 초기화하는 것은 물론,
선언시에도 NULL로 초기화 합니다.
이게 버릇이 되면,
사소한 실수로 메모리가 새는 경우는 웬만큼 막을 수 있죠..
답변 감사합니다.저도 다음부터는 memory free 이후에 nu
답변 감사합니다.
저도 다음부터는 memory free 이후에 null pointer 초기화를 해야 겠네요..^^;
부모님께 효도합시다.
습관의 차이이지만 저같은 경우에도 메모리를 free하거나 포인터를 선언시
습관의 차이이지만 저같은 경우에도 메모리를 free하거나 포인터를 선언시 반드시 NULL로 초기화를 합니다.
free를 한 후에 NULL로 초기화를 안하면 해당 포인터에는 아직도 예전에 쓰던 포인터 값이 존재하는데 이는 이미 운영체제에게 반납된 메모리이므로 다음번에 해당 메모리를 엑세스 할 시에 대부분 프로그램이 죽습니다.
NULL로 초기화를 하면 NULL포인터 참조를 해서 죽겠지만.. 그렇지 않고 해제한 메모리를 엑세스 하다가 죽으면 이를 찾기는 매우 힘들거든요..
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
댓글 달기