Avatar
회사에서는
Todd

Cybertramp

아래에서 위로

포인터 변수를 인자로 넘겨 외부 함수 내에서 동적 할당하여 사용하기

글을 쓴날: 2022-01-03

A.cpp라는 클래스에서 포인터 변수를 선언 하고 B.cpp 내의 클래스 함수에서 인자로 넘겨 동적할당한 후 사용되게 하려면…

  • 아래는 내부 버퍼를 가지고 카피하는 방식
//A.h
u_int8_t *m_pBuf;

//A.cpp
rc = g_func.GetLog_0x03(m_pBuf);
display_getlog_03h(m_pBuf);
delete[] m_pBuf;

//B.cpp
u_int32_t CFuncUtil::GetLog_0x02(u_int8_t *&getlog_m_pBuf){
	u_int8_t *pBuf = new u_int8_t[nBufferSize];
	memset(pBuf, 0x0, nBufferSize);
	
	// copy to m_pBuf
	getlog_m_pBuf = new u_int8_t[nBufferSize];
	memcpy(getlog_m_pBuf, pBuf, nBufferSize);

	// free pBuf
	delete[] pBuf;
	pBuf = NULL;
	
	return RETURN_SUCCESS;

}
  • 아래는 외부 것 그대로 사용하는 방식
//A.h
u_int8_t *m_pBuf;

//A.cpp
rc = g_func.GetLog_0x03(m_pBuf);
display_getlog_03h(m_pBuf);
delete[] m_pBuf;

//B.cpp
u_int32_t CFuncUtil::GetLog_0x02(u_int8_t *&getlog_m_pBuf){
	getlog_m_pBuf = new u_int8_t[nBufferSize];
	memset(getlog_m_pBuf, 0x0, nBufferSize);
	
	return RETURN_SUCCESS;
}

C++ difference between ** and *& in parameter passing - Stack Overflow)

u_int8_t *&getlog_m_pBuf 이렇게 사용하는 방식을 reference to pointer-to-node 이라 하며, u_int8_t **getlog_m_pBuf 이렇게 사용하는 방식을 pointer-to-pointer-to-node 이라 한다.


 

comments powered by Disqus