1. delete 用于释放 new 分配的空间,free 有用释放 malloc 分配的空间2. delete [] 用于释放 new [] 分配的空间3. delete 释放空间的时候会调用 相应对象的析构函数顺便说一下new在分配空间的时候同时会调用对象的构造函数,对对象进行初始化,使用malloc则只是分配内存4. 调用free 之前需要检查 需要释放的指针是否为空,使用delete 释放内存则不需要检查指针是否为NULL5. free 和 delete 不能混用,也就是说new 分配的内存空间最好不要使用使用free 来释放,malloc 分配的空间也不要使用 delete来释放举个例子,
#include <stdio.h>
#include <new>
#include <iostream>
#include <stdlib.h>
#include <string.h>
int main()
{
int *p = NULL,*p1=NULL;
int i;
//p = (int *) malloc(10 * sizeof(int));
p = new int[10];
memset(p,0,sizeof(int) * 10);
for(i=0;i<10;i++)
printf("P:%dt",p[i]);
printf("addr p: %xn",p);
*(p-1) = 2; //如果不注释掉这一行则程序运行不正确
*(p+11) = 3;
printf("addr before p: %xn",p+11);
printf("%x %xn",*(p-1),*(p+11));
//free(p);
delete [] p;
printf("free successfully! n");
return 0;
}
当不注释*(p-1) =2 这一行时,结果为:
原文链接: https://www.cnblogs.com/wangfengju/archive/2013/05/24/6173030.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/89712
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!