码迷,mamicode.com
首页 > 编程语言 > 详细

根据上篇博客联想到了C/C++和Delphi的内存分配和管理的问题

时间:2015-04-28 15:52:27      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:

首先看上一篇博客关于类创建对象的问题:http://www.cnblogs.com/xumenger/p/4462975.html

 

联想到通过指针分配内存

  我们通过指针动态分配了内存之后,需要记住这个指针(该指针指向分配的内存),比如C/C++中的

int *pi;
pi =(int*) malloc(10* sizeof(int));

  pi 就是用来记录分配的内存的地址。在Delphi中

var
    pi: PInteger;
begin
    GetMem(p, sizeof(Integer)*10);
end;

  这里的pi 也是用来记录分配的内存的地址

  就像上面两种情况,如果在没有释放内存之前想要让 pi 指向新的地址,这时候一定要创建新的指针首先保存 pi的值(也就是保存这块内存的地址,比如 ptemp)

//C/C++中
int* ptemp = pi;

//Delphi中
var
    ptemp: PInteger;
begin
    ptemp:= pi;
end;

 

  再去让 pi 去指向新的地址,这样就是为了不去丢失对这块内存的控制,这样pi 不再指向这块内存,但是可以通过新的指向这块内存的指针来释放这块内存,而不至于内存泄露,比如在C/C++和 Delphi中

//C/C++中
free(ptemp);

//Delphi中
FreeMem(ptemp);

  

 

  为什么要记住这块内存的地址?

  因为你之所以需要分配这块内存,就是要使用这块内存来存储数据、对这里的数据进行操作、以及最终去释放这块内存

  只有你记录这块内存的地址,才可以通过指针来使用这块内存,并且最终才能够释放这块内存,否则分了内存确立马丢失了这块内存的地址,一方面无法使用这块内存,另一方面无法释放内存,最终导致内存泄露

根据上篇博客联想到了C/C++和Delphi的内存分配和管理的问题

标签:

原文地址:http://www.cnblogs.com/xumenger/p/4462982.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!