访问指针所指向的位置

来源:互联网 发布:小米手环2淘宝50天预发 编辑:程序博客网 时间:2024/05/16 22:01

     今天又犯了一个低级错误,并造成内存访问越界,最要命的是竟然花了我好长时间才搞明白,可悲、可恨....呵呵。

就是分配了一个缓存,如char* buf = new buf[4096]

   然后,将这个缓存作为一个内存池,必要时分配使用。假如我现在需要分配一个结构体node大小空间,node如下定义:

     struct node{

          int count;

          struct node* PHead;

   };

 

代码如下所示(为了简单起见,假如从第一个node开始分配):

 

    node* pNode = (node*)buf;

 

下面如果要分配第二个,如下所示:

    node* pNode2 = (node*)(buf+sizeof(node));

 

如果分配第n个,代码如下:

    node* pNoden = (node*)(buf+sizeof(node)*n);

 

以上代码都是正确的,不过本人粗心大意:

   代码写成(假如分配第n个节点):

 

   node* pNoden = (node*)(buf+n)

 

呵呵,我们知道,假如指针当前位置为Addr,指针+一个常数(n),得到地址为Addr+sizeof(type)*n。其中,type为指针的类型.即

指针累加的不长,由其类型和累加的长度决定的。

 

 

原创粉丝点击