给1,2,3维数组指针开辟空间或销毁释放空间

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haimianjie2012/article/details/81913160

#pragma once

// 给1维数组指针开辟空间或销毁释放空间
template<typename T>   
inline BOOL ReSize1dDataPointer(T * &pImage1Data, int i1D)
{
	BOOL bResult = FALSE;

	if (i1D == 0)		// 当 = 0 时代表删除一个数组
	{
		// 删除之前内存
		if (pImage1Data !=  NULL)
		{
			__try
			{
				delete [] pImage1Data;
				pImage1Data = NULL;
			}
			__except(EXCEPTION_EXECUTE_HANDLER){;}
		}
	}
	else if (i1D > 0)	// 如果还大于0,代表重新分配
	{
		__try
		{
			pImage1Data = new T[i1D];

#ifdef _DEBUG
			memset(pImage1Data, 65, sizeof(T)*i1D);	// 'A'
#endif

			bResult = TRUE;
		}
		__except(EXCEPTION_EXECUTE_HANDLER) {

			pImage1Data = NULL;
			bResult = FALSE;
		}
	}

	return bResult;
}

// 给2维数组指针开辟空间或销毁释放空间
template<typename T>   
inline BOOL ReSize2dDataPointer(T ** &pImage2Data,int iOld1D,int i1D,int i2D)
{
	BOOL bResult = FALSE;

	if ( iOld1D >= 0 )
	{			
		__try
		{
			ReSize1dDataPointer(pImage2Data[0],0);
		}
		__except(EXCEPTION_EXECUTE_HANDLER){;}

		ReSize1dDataPointer(pImage2Data,0);

		if ( i1D > 0 && i2D > 0 
			&& ReSize1dDataPointer(pImage2Data,i1D) )
		{
			T * pData = NULL;

			if ( ReSize1dDataPointer(pData,i1D*i2D) )
			{
				for ( int i = 0; i < i1D; ++i )
				{
					pImage2Data[i] = pData;
					pData += i2D;
				}

				bResult = TRUE;
			}
			else ReSize1dDataPointer(pImage2Data,0);	// 开辟1维失败时释放空间
		}
	}

	return bResult;
}

// 给3维数组指针开辟空间或销毁释放空间
template<typename T>   
inline BOOL ReSize3dDataPointer(T *** &pImage3Data,int i1D,int i2D,int i3D)
{
	BOOL bResult = FALSE;

	__try
	{
		ReSize1dDataPointer(pImage3Data[0][0],0);
	}
	__except(EXCEPTION_EXECUTE_HANDLER){;}

	ReSize2dDataPointer(pImage3Data,0,0,0);

	if ( i1D > 0 && i2D > 0 && i3D > 0
		&& ReSize2dDataPointer(pImage3Data,0,i1D,i2D) )
	{
		T * pData = NULL;

		if ( ReSize1dDataPointer(pData,i1D*i2D*i3D) )
		{
			for ( int i = 0; i < i1D; ++i )
			{
				for ( int j = 0; j < i2D; ++j )
				{
					pImage3Data[i][j] = pData;
					pData += i3D;
				}
			}

			bResult = TRUE;
		}
		else ReSize2dDataPointer(pImage3Data,0,0,0);	// 开辟2维失败时释放空间
	}

	return bResult;
}

猜你喜欢

转载自blog.csdn.net/haimianjie2012/article/details/81913160