명시적(?)인 메소드(함수) 제공하기?

무나무나의 이미지


안녕하세요.. __);

공용라이브러리를 만들다가 문득 이 생각이 들었습니다.

명시적인 메소드(함수) 제공하는 방법이 있을까요?

예로...

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를 좀더 명시적으로 해서 잘못된 사용을 막는 방법이 있을련지요?

고수님들의 많은 조언 부탁드립니다.. __);

Tirin의 이미지

변수는 무조건 초기화를 하며, 멤버함수에서는 무조건 인자의 초기화 값을 검사한다거나 하는 방법이 있지요. 이를터면 포인터는 무조건 널포인터로 초기화, 그 변수를 사용하기 전엔 언제나 널 여부를 확인하구요.

뭐 테크닉이나 트릭 종류는 아니지만, 습관만 들이면 간단한 실수는 냉큼 잡을수 있잖아요?

- Tirin.

- Tirin.

chadr의 이미지

동적할당이라는 것은 컴파일타임에 포인터가 널이 아닌지는 확인이 불가능합니다.
언어적인 문법지원은 없습니다.

단순하게 해당 포인터가 한번이라도 대입문이 있는지를 확인해서 컴파일러가 체크를 해줄수 있지만
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.

M.W.Park의 이미지

정적(static) 테스트 도구들 중에 쓸만한 거 찾아서 써보세요.
메모리 관련한 일반적인 오류들(초기화 하지 않고 쓰기, free 빼먹기 등)도 잘 찾아줍니다.

-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

aswip의 이미지

assert 추천

- 인생은 스스로 -

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.