首先看上一篇博客关于类创建对象的问题: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);
为什么要记住这块内存的地址?
因为你之所以需要分配这块内存,就是要使用这块内存来存储数据、对这里的数据进行操作、以及最终去释放这块内存
只有你记录这块内存的地址,才可以通过指针来使用这块内存,并且最终才能够释放这块内存,否则分了内存确立马丢失了这块内存的地址,一方面无法使用这块内存,另一方面无法释放内存,最终导致内存泄露
时间: 2024-11-10 15:17:53