realloc出错
void* pData = malloc(BUFFER_SIZE);
int nMallocTimes = 1;
int nPointer = 0;
int nStrCount = 0;
int nDataLen = 0;
TCHAR* lpszTemp = NULL;
void* pTempPointer = pData;
try
{
for( int i = 0; i < 16; i++ )
{
nStrCount = wcslen(szarrTemp[i]);
nDataLen = nStrCount * sizeof( TCHAR ) + 2;
int nOffset = ((char*)pTempPointer - (char*)pData);
if( ( nMallocTimes * BUFFER_SIZE - nOffset ) < sizeof( DWORD ) + nDataLen )
{//检测缓冲区
void* pDataNew = realloc(pData,BUFFER_SIZE);
if( NULL == pDataNew ) throw -1;
nMallocTimes++;
}
*(DWORD*)pTempPointer = nDataLen;
lpszTemp = (TCHAR*)( ( char* )pTempPointer + sizeof( DWORD ) );
wcscpy(lpszTemp,szarrTemp[i]);
pTempPointer = (char*)pTempPointer + sizeof( DWORD ) + nDataLen;
}
}catch(...)
{
free( pData );
return NULL;
}
这段代码如果去掉赋值的语句
*(DWORD*)pTempPointer = nDataLen;
lpszTemp = (TCHAR*)( ( char* )pTempPointer + sizeof( DWORD ) );
wcscpy(lpszTemp,szarrTemp[i]);
就不会出错,要不然就会在第三次调用realloc时出错