zoukankan      html  css  js  c++  java
  • 一个动态的指针数组怎样获得长度

    在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


  • 相关阅读:
    CCNP-----企业网三层架构——BCMSN
    Redis 的 GEO 特性将在 Redis 3.2 版本释出
    CentOS6.5上源码安装MongoDB3.2.1
    beanstalkd
    php7---redis
    MongoDB学习笔记(入门)
    MongoDB学习笔记(数据操作)
    MongoDB学习笔记(索引)
    CentOS 安装MongoDB
    爬虫----Web_WeChat
  • 原文地址:https://www.cnblogs.com/catkins/p/5270807.html
Copyright © 2011-2022 走看看