A Sip of Turkish Coffee
A Sip of Turkish Coffee by Kuzeytac (OUT, till 20.08.09-see profile) 저작자 표시비영리변경 금지

(위 짤방은 그냥 Filckr 에서 'heap' 으로 검색하니까 나온 이미지로, 본문과는 전혀 상관 없습니다;;;)

언젠가부터 자꾸 map 처리에서 exception 이 발생하기 시작했습니다...
해당 map 이 상당히 간단하게만 사용되던 부분이라 중첩콜 되는 부분도 없었고, 여러 스레드에서 호출되는 부분도 없었던지라
map 사용 오류라기 보다는 어디선가 다른 코드에서의 메모리 쓰기 오류로 판단만 하고 있었죠...
자주 발생하고 재현하기가 쉬운 문제라면 디버깅이라도 해서 문제 부분을 잡을 수 있겠지만 그런것도 아니었기에 난감한 상황이었습니다.

어찌되었든 해결을 해야 했기에 배열 인덱스 검사 코드 강화, map 사용 코드 다시 확인 등등을 해도 찾기가 쉽지 않더군요..

인터넷에서 검색을 해보니 도움을 받을 수 있는 프로그램들이 있는 것 같았지만 모두 상용 프로그램인지라 쉽사리 사용할 수도 없었습니다.
그러던 중 _heapchk() 에 대한 내용을 봐서 혹시나 하는 마음에 코드에 추가하여 로그를 살펴보기로 했었습니다.

결과는 일단은 성공입니다.

로그에 _heapchk() 오류가 남은 부분을 다시한번 체크해보니, 배열 사용하는 부분이었는데 배열 인덱스 체크하는 부분이 없어서 잘못된 인덱스에 대한 대비가 안되어있는 부분이더군요.

정확한 오류부분을 찝어주지는 않지만, 범위를 좁혀가는 식으로 사용하면 큰 도움이 될 것 같습니다. :)
반응형

'저장고 > C++' 카테고리의 다른 글

std::string 문자열 공백 자르기 함수  (0) 2009.04.28
COptionTree를 vs2003에서 사용하기  (0) 2009.04.10
GoogleTest??  (2) 2008.10.14
문자열에서 공백(스페이스, 텝 등)을 제거해주는 함수.
코드가 간결하고 좋다


반응형

'저장고 > C++' 카테고리의 다른 글

_heapchk() 메모리 긁는 문제의 실마리...  (0) 2009.08.01
COptionTree를 vs2003에서 사용하기  (0) 2009.04.10
GoogleTest??  (2) 2008.10.14
COptionTree Codeproject Page Link

위 링크를 가보면 알겠지만 상당히 유용한 라이브러리인 COptionTree
하지만, vs2003에서는 위 링크에서 제공하는 소스를 컴파일 할 경우 여러가지 에러가 나며 컴파일 되지 않습니다.



이를 해결하기 위한 방법입니다.

1. 포함 파일을 열 수 없습니다. '..\src\afximpl.h': No such file or directory

afximpl.h 파일 include 에러가 나는 코드를 찾아가서 아래와 같이 수정합니다.

OptionTreeFontSelSizeCombo.cpp
OptionTreeFontSel.cpp


2. 매개 변수 2을(를) 'HTASK'에서 'DWORD'(으)로 변환할 수 없습니다.

아래 파일들에 선언/사용된 함수의 HTASK 인자형식을 모두 DWORD 로 변경해줍니다.

OptionTreeColorPopUp.h(123): afx_msg void OnActivateApp(BOOL bActive, HTASK hTask);
OptionTreeColorPopUp.cpp(1181):void COptionTreeColorPopUp::OnActivateApp(BOOL bActive, HTASK hTask) 
OptionTreeImagePopUp.h(88): afx_msg void OnActivateApp(BOOL bActive, HTASK hTask);
OptionTreeImagePopUp.cpp(284):void COptionTreeImagePopUp::OnActivateApp(BOOL bActive, HTASK hTask) 


위의 두가지 수정작업만 해주면 vs2003에서도 COptionTree 를 문제 없이 사용할 수 있습니다. :)
vs2005는 안써봐서 잘 모르겠지만, vs2005에서도 위와 같은 방법으로 사용가능한 것으로 알고 있습니다. :)
반응형

'저장고 > C++' 카테고리의 다른 글

std::string 문자열 공백 자르기 함수  (0) 2009.04.28
GoogleTest??  (2) 2008.10.14
callstack 정보 출력 라이브러리  (0) 2008.09.19
링크 : http://code.google.com/p/googletest/

인터넷 여기저기 돌아다니다가 우연히 발견한건데..
함 써보면 좋을듯.. =ㅅ=)a
뭐.. UnitTest(?) 툴이라는데 함수 테스트하는데 사용하는 놈인듯...
아직은 어떻게 쓰는건지 잘 모르겠고 나중에 함 연구해바야지...

반응형

'저장고 > C++' 카테고리의 다른 글

COptionTree를 vs2003에서 사용하기  (0) 2009.04.10
callstack 정보 출력 라이브러리  (0) 2008.09.19
rand() 범위가 별로 안되는구나....  (5) 2008.08.19
링크 : http://www.codeproject.com/KB/threads/StackWalker.aspx

callstack 정보를 debug 출력창에 보여주는 라이브러리.
사용도 무지 간단하다..

단지, 디버그창에만 보여주는게 아쉬운데... 출력하는 부분을 약간 수정해서
원하는 출력을 얻을 수 있을듯....

주로 크래쉬 날경우 dmp파일을 남겨서 사용하긴 하지만...
dmp 확인이 불가능할 경우를 대비해서 사용하는 것도 괜찮을듯... +_+
반응형

'저장고 > C++' 카테고리의 다른 글

GoogleTest??  (2) 2008.10.14
rand() 범위가 별로 안되는구나....  (5) 2008.08.19
폴더 삭제하기  (0) 2007.12.26
아무 생각 없이 쓰던 rand()...

최대값이 의외로 작구나.. orz

확률 체크하는데 사용는데 계속 이상하다고 해서 확인하고 찾아보니..

rand() 의 최대값은 RAND_MAX (0x7fff) 으로 정의되어있네... orz
반응형

'저장고 > C++' 카테고리의 다른 글

callstack 정보 출력 라이브러리  (0) 2008.09.19
폴더 삭제하기  (0) 2007.12.26
filelength는 표준이 아닌가...  (3) 2007.12.08
지정 폴더내의 파일, 하위폴더까지 지워주는 함수...

그냥 필요해서 여기저기서 참고해서 만든함수...

(제대로 만든건지는 모르겠음... 어쨋든 지워지긴 지워진다. ㅎㅎㅎ)


반응형

'저장고 > C++' 카테고리의 다른 글

rand() 범위가 별로 안되는구나....  (5) 2008.08.19
filelength는 표준이 아닌가...  (3) 2007.12.08
ifstream memory leak...  (2) 2007.12.08
흠.. 평소 파일을 다루는 작업을 거의 안하다보니..
파일 다루는데서 자꾸 헤매고 있다....

아래 글에서 ifstream() 대체 코드를 아래의 코드로 작업을 했었는데..
(winapi.co.kr 의 소스 참조해서 작업했다.)

분명 작업PC(windows xp)에서는 정상 작동을 확인하고 다른분(windows vista)께 넘겨드렸는데 제대로 안된다고 해서 가서 보니 filelength()에서 -1을 반환하고 있었다.

fileno() 함수가 잘못된건지, filelength() 함수가 잘못된건지는 모르지만 아무튼 제작업...

결국 아래의 코드로 해결 봤다.

반응형

'저장고 > C++' 카테고리의 다른 글

폴더 삭제하기  (0) 2007.12.26
ifstream memory leak...  (2) 2007.12.08
FormView 에 Dialog 붙이기  (2) 2007.10.09
데이터를 binary 로 저장하고 읽어오는 코드를 작업해놓은게 있었는데..

어느날부터 이 부분에서 memory leak 현상이 나타났다.

마침 그 현상 바로 전에 기존과는 좀 다른 방식으로 추가한 코드 부분이 있어서

그 부분이 원인이라고 철썩같이 믿고 있었는데...

오늘 날 잡고 그 부분을 분석해보니...

파일을 읽어올 때 사용한 ifstream 에서 메모리가 새는 것으로 나타났다.

결국 인터넷을 찾아보니 VS6.0의 STL에 있는 버그라고 해서 fopen, fread 등의 함수로

수정하긴 했는데... 바꿔놓고 생각해보니 내가 쓰는건 2003...

2003에서는 수정된 버그라고는 하던데... 내가 잘못쓴건가??

아무튼.. 수정하고 나니 memory leak 은 사라졌다

ifstream...... 모땐것 -_-
반응형

'저장고 > C++' 카테고리의 다른 글

filelength는 표준이 아닌가...  (3) 2007.12.08
FormView 에 Dialog 붙이기  (2) 2007.10.09
MD5 Hash 생성 소스  (0) 2007.08.23

FormView에 Dialog를 붙이는 코드

(사실은 CDialogBar)

이 코드는 데브피아에 올라온 양찬경 님의 코드이다.
관련링크 : 보러가기


Dialog 의 속성을 아래와 같이 설정한다.
Border : None
Style : Chiled


아래의 코드를 추가한다.



//CMainFrame.h
#pragma once
class CMainFrame : public CFrameWnd
{
    public:
        CDialogBar m_wndDialogBar; // 추가할 부분
}
//CMainFrame.cpp
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    // 중략
    // Quest List bar ------------------------------------------------------
    if(!m_wndQuestListBar.Create(this, IDD_DIALOG1, // DIALOG에 설정된 ID
    CBRS_LEFT | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE,
    IDS_STRING_TEST)) //스트링 테이블에서 작성하세요
    {
        TRACE0("Failed to create dialog bar m_wndDialogBar\n");
        return -1;        // fail to create
    }

    m_wndQuestListBar.EnableDocking(CBRS_ALIGN_LEFT | CBRS_ALIGN_RIGHT);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndQuestListBar);
    //-----------------------------------------------------------------------
    return 0;
}
반응형

'저장고 > C++' 카테고리의 다른 글

ifstream memory leak...  (2) 2007.12.08
MD5 Hash 생성 소스  (0) 2007.08.23
원격 디버깅  (7) 2006.08.07

+ Recent posts