获取一个指针所指向内存空间的长度

template <class T>
int GetNewBufferSize(T *p)
{   //获取一个指针所指向内存空间的长度
    if (p)
        return *(int*)((char *)p - 16) / sizeof(*p);
    else
        return 0;
}

例如获取一个动态二维数组的长度

    float **temPix;
    temPix = (float**)malloc(3* sizeof(float*));
    for (int i = 0; i < 3; i++)
        temPix[i] = (float*)malloc(4 * sizeof(float));
//-----------------------------------------
GetNewBufferSize(temPix)=3;
GetNewBufferSize(temPix[0])=4;

(int)((char *)p-16) 原理就是, 当动态分配时,会在分配的指针地址前16字节,保存一个数来记录分配的大小.... debug下为16字节,但是release 下不知道是多少字节

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容