지금 일본에에 관련된 프로그램을 짜구 있거든여..
근데 그게 WIN32와 C코드로 되어 있어서...
제머리론 분석이 안대는 군요..
HIMC m_hIMC;
DWORD dwBufLen;
LPCANDIDATELIST lpCandList;
LPSTR lpStr;
case IMN_OPENCANDIDATE:
m_CanMax = 0;
m_CanCount = 1;
dwBufLen = ImmGetCandidateList(m_hIMC, 0, lpCandList, 0);
if(dwBufLen == 0) break;
lpCandList = (LPCANDIDATELIST)new char[dwBufLen];==========> 이부분
ImmGetCandidateList(m_hIMC, 0, lpCandList, dwBufLen);
m_CanMax = (int)lpCandList->dwCount;
if(m_CanMax >= MAX_CAN_COUNT) m_CanMax = MAX_CAN_COUNT - 1;
for(i = 0;i < m_CanMax; i ++)
{
lpStr = (LPSTR)lpCandList + lpCandList->dwOffset[i]; ===> 이부분
strcpy(m_CanTbl[i], lpStr);
}
delete lpCandList;
lpCandList = NULL;
break;
2군데인데...
제생각으로는 lpCandList 을 동적 배열루 할당 하는거 같기두 하구...
new 뒤에 char[dwBufLen]이 글자가 엄청 아리까리 하네여..
암튼 해보니깐...IMM 유닛에
CANDIDATELIST 라는 구조체중 dwOffset이라구 있는데..
그걸 도움말에서 보니깐 뭐..영어루 배열루 생성된다 머 그렇게 써 있는거 같은데..
전혀 그럴 기미가 없구여..
암튼 지금 정신없이 헤메구 있습니다...쩝..
아시는분은 저좀 가르쳐 주세여..
> 지금 일본에에 관련된 프로그램을 짜구 있거든여..
> 근데 그게 WIN32와 C코드로 되어 있어서...
> 제머리론 분석이 안대는 군요..
>
> HIMC m_hIMC;
> DWORD dwBufLen;
> LPCANDIDATELIST lpCandList;
> LPSTR lpStr;
>
> case IMN_OPENCANDIDATE:
> m_CanMax = 0;
> m_CanCount = 1;
> dwBufLen = ImmGetCandidateList(m_hIMC, 0, lpCandList, 0);
> if(dwBufLen == 0) break;
> lpCandList = (LPCANDIDATELIST)new char[dwBufLen];==========> 이부분
> ImmGetCandidateList(m_hIMC, 0, lpCandList, dwBufLen);
> m_CanMax = (int)lpCandList->dwCount;
> if(m_CanMax >= MAX_CAN_COUNT) m_CanMax = MAX_CAN_COUNT - 1;
> for(i = 0;i < m_CanMax; i ++)
> {
> lpStr = (LPSTR)lpCandList + lpCandList->dwOffset[i]; ===> 이부분
> strcpy(m_CanTbl[i], lpStr);
> }
> delete lpCandList;
> lpCandList = NULL;
> break;
>
> 2군데인데...
> 제생각으로는 lpCandList 을 동적 배열루 할당 하는거 같기두 하구...
> new 뒤에 char[dwBufLen]이 글자가 엄청 아리까리 하네여..
> 암튼 해보니깐...IMM 유닛에
> CANDIDATELIST 라는 구조체중 dwOffset이라구 있는데..
> 그걸 도움말에서 보니깐 뭐..영어루 배열루 생성된다 머 그렇게 써 있는거 같은데..
> 전혀 그럴 기미가 없구여..
> 암튼 지금 정신없이 헤메구 있습니다...쩝..
> 아시는분은 저좀 가르쳐 주세여..
>
무슨 소스인지는 잘모르겠는데요..
일단 동적 배열로 할당하는거 맞습니다.
> lpCandList = (LPCANDIDATELIST)new char[dwBufLen];==========> 이부분
여기서 dwBufLen 크기의 메모리를 할당하고
사용하는건데요..
제생각으론 소스가 쫌 이상합니다.
CANDIDATELIST 구조체 크기 만큼 메모리를 할당해야 할텐데..
char타입의 배열로 할당하고 있고,
또한 메모리 해제할때도 문제가 있습니다.
배열로 할당한 메모리는
delete [] lpCandList;
이렇게 해제해 주어야 합니다.
이소스만을 봤을때는 뭔가 쫌 잘못 된 소스인거 같습니다.