명시적(?)인 메소드(함수) 제공하기?
글쓴이: 무나무나 / 작성시간: 수, 2008/05/28 - 12:06오후
안녕하세요.. __);
공용라이브러리를 만들다가 문득 이 생각이 들었습니다.
명시적인 메소드(함수) 제공하는 방법이 있을까요?
예로...
typedef struct tagCONFIG_DATA
{
BYTE byTmr3;
BYTE byTmr5;
...
}CONFIG_DATA, *PCONFIG_DATA;
void CTest::GetConfig(CONFIG_DATA * pData)
{
memcpy(pData, &m_ConfigData, sizeof(CONFIG_DATA));
return;
}
이런 코드가 있다고 가정을 한다면요..
메인안에서 실수로
CTest test;
CONFIG_DATA * pData;
test.GetConfig(pData);
이렇게 사용을 한다면 컴파일러가 물론 경고를 내겠지만요.
무언가 방법을 써서, 메모리 할당이 안된 포인터는 아예 쓰지를 못한다거나..
아니면 GetConfig를 좀더 명시적으로 해서 잘못된 사용을 막는 방법이 있을련지요?
고수님들의 많은 조언 부탁드립니다.. __);
Forums:
간단하게는..
변수는 무조건 초기화를 하며, 멤버함수에서는 무조건 인자의 초기화 값을 검사한다거나 하는 방법이 있지요. 이를터면 포인터는 무조건 널포인터로 초기화, 그 변수를 사용하기 전엔 언제나 널 여부를 확인하구요.
뭐 테크닉이나 트릭 종류는 아니지만, 습관만 들이면 간단한 실수는 냉큼 잡을수 있잖아요?
- Tirin.
- Tirin.
동적할당이라는 것은
동적할당이라는 것은 컴파일타임에 포인터가 널이 아닌지는 확인이 불가능합니다.
언어적인 문법지원은 없습니다.
단순하게 해당 포인터가 한번이라도 대입문이 있는지를 확인해서 컴파일러가 체크를 해줄수 있지만
free가 된 포인터를 체크할 방법은 없습니다.
윈도우의 경우에는 IsBadWritePtr IsBadReadPtr등의 함수를 이용해서 체크가 가능하긴 합니다만..
속도가 느립니다. :)
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
정적(static) 테스트
정적(static) 테스트 도구들 중에 쓸만한 거 찾아서 써보세요.
메모리 관련한 일반적인 오류들(초기화 하지 않고 쓰기, free 빼먹기 등)도 잘 찾아줍니다.
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
assert
assert 추천
- 인생은 스스로 -
댓글 달기