根据上篇博客联想到了C/C++和Delphi的内存分配和管理的问题
首先看上一篇博客关于类创建对象的问题: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);
为什么要记住这块内存的地址?
因为你之所以需要分配这块内存,就是要使用这块内存来存储数据、对这里的数据进行操作、以及最终去释放这块内存
只有你记录这块内存的地址,才可以通过指针来使用这块内存,并且最终才能够释放这块内存,否则分了内存确立马丢失了这块内存的地址,一方面无法使用这块内存,另一方面无法释放内存,最终导致内存泄露
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。