//======================================================================== //TITLE: // malloc、realloc和new你明白了么? //AUTHOR: // norains //DATE: // Saturday 05-January-2008 //Environment: // VS2005 + SDK-WINCE5.0-MIPSII // EVC + SDK-WINCE5.0-MIPSII //======================================================================== malloc和realloc是C标准函数,而new是C++(www.cppentry.com)的关键字,三者都能动态分配内存.但其中一些有意思的细节,你注意了么 在开篇之前,我们首先需要明确一个概念,数据存储在内存中是无针对性的,换句话说,内存里面的数据,究竟是解释为字符串还是解释为整数,甚至是一个DWORD值还是一个拥有两个WORD的数值,它都是不知道的.如何解释内存中的数据,只和指向这段内存的指针有关. 我们可以用以下代码验证: int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { #define MAX_SIZE_MALLOC 8
BYTE *pBuf = (BYTE *)malloc(MAX_SIZE_MALLOC); memset(pBuf + 0,0x17,1); memset(pBuf + 1,0x4f,1); memset(pBuf + 2,0xBA,1); memset(pBuf + 3,0x4E,1); memset(pBuf + 4,0x9B,1); memset(pBuf + 5,0x52,1); memset(pBuf + 6,0x00,1); memset(pBuf + 7,0x00,1);
WCHAR *pStr = (WCHAR *) pBuf; wprintf(L"Wide-String : %s ",pStr);
int *pInt = (int *)pBuf; for(int i = 0 ; i < MAX_SIZE_MALLOC / sizeof(int); i ++) { printf("pInt[%d]: %d ",i,pInt[i]); }
free(pBuf);
Sleep(1000); }
|