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

在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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值