当前位置: 代码迷 >> 综合 >> malloc/free与new/delete简单讲
  详细解决方案

malloc/free与new/delete简单讲

热度:88   发布时间:2023-12-12 04:18:14.0

一:malloc/free(函数)

malloc(memory allocation),意为动态内存分配,,从堆中分配和释放内存。
一般形式:

void *malloc(int numbytes);
void free(void *ptr);

案例一:

    int *p = NULL;p = (int*)malloc(10 * sizeof(int));if (p){
    *p = 10;//只用到了分配40个字节当中的前4个cout << *p << endl;free(p); //记得释放内存}

案例二:

    int *p = NULL;int *q = NULL;p = (int*)malloc(10 * sizeof(int));q = p;if (p){
    *q++ = 10;//在当前位置上赋值,然后指针移动*q++ = 20;//在当前位置上赋值,然后指针移动cout << *p << endl;cout << *(p+1) << endl;free(p); }

二:new/delete(运算符)

使用方式:

指针变量名 = new 类型标识符;
指针变量名 = new 类型标识符(初始值);
指针变量名 = new 类型标识符[内存单元个数];

案例一:

int *p = new int; if (p != NULL) //new失败可能直接报异常,而不是返回NULL{
    *p = 20;cout << *p << endl;delete p;}

案例二:

    int *p = new int(2); if (p != NULL) //new失败可能直接报异常,而不是返回NULL{
    cout << *p << endl; //2*p = 20;cout << *p << endl; //20delete p;}

案例三:

int *p = new int[100]; //申请100*4个字节if (p != NULL) //new失败可能直接报异常,而不是返回NULL{
    int *a = p; //a指向p所申请内存的首地址*a++ = 3;*a++ = 6;cout << *p << endl; //3cout << *(p+1)<< endl; //6delete[] p; //释放内存,不用写成delete[100] p;}

注意:
(1)malloc/free与new/delete必须配套使用
(2)不可多次使用delete来释放同一块内存,因为这个时候,已经不是把属于自己的内存空间进行释放了,有可能会出现程序异常。

  相关解决方案