一個動態的指針數組怎樣獲得長度


在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



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com