一个动态的指针数组怎样获得长度

在debug 下 可以解决,但是在release 模式下 不知道如何解决~~
#include<iostream>
using namespace std;

int GetNewBufferSize(void *p)
{
if ( p )
return *(int*)((char *)p-16);
else
return 0;
}


int main()
{
int *arry=new int [10];
for(int i=0;i<10;i++)
arry[i]=0;
cout<<GetNewBufferSize(arry)/sizeof(arry[0]);
delete []arry;
return 0;

}



vc6.0 常用的 调试模式 叫做 debug ... 它产生的.exe文件 只能在安装了vc的机器上运行
release 是发行版,,当你的程序 想在别人的机器(没安装vc)运行时 ,使用release 模式...

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



首先更正: 是 16个字节不是 16位...... 让你带来了误解...
原本将一个int 的指针 变为char指针 是为了 方便 -16个字节 .... (因为如果int 指针 -1的话是移动4个字节)

(int *)((char *)p - 16)这样一个整型指针进行解引用是什么含义?

方便啊.. 如果你动态分配的 指针类型不是 int 型的, 而是double 型呢??
那么(int *)((char *)p - 16) 仍然 适用.......

原文地址:http://bbs.bccn.net/thread-93984-1-1.html


原文地址:https://www.cnblogs.com/catkins/p/5270807.html