国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++中malloc與free、new與delete的詳解與應(yīng)用

2020-01-26 13:36:08
字體:
供稿:網(wǎng)友

C++面試經(jīng)常會問到關(guān)于malloc/free和new/delete的區(qū)別,網(wǎng)上有不同版本的解釋,這里總結(jié)下并加上個人理解和使用。

兩者相同點

  • 1.都可以申請動態(tài)堆內(nèi)存。

兩者不同點

  • 1.new/delete是C++的操作符,malloc/free是C/C++的標準庫函數(shù)。
  • 2.new申請的可以理解為對象,new時會調(diào)用構(gòu)造函數(shù),返回指向該對象的指針,delete時調(diào)用析構(gòu)函數(shù);malloc申請的只是內(nèi)存,不是對象。
  • 3.new/delete是保留字,不需要頭文件支持;malloc/free需要頭文件庫函數(shù)支持。

注意事項

  • 1.用new申請的內(nèi)存,必須用delete釋放。
  • 2.用new[]申請的內(nèi)存,必須用delete[]釋放。
  • 3.delete釋放內(nèi)存后,指針值不變,良好的風(fēng)格是釋放后指針置為NULL,如,delete p; p = NULL。
  • 4.用malloc申請的內(nèi)存,必須用free釋放。

使用

#include "stdafx.h"#include <stdio.h>#include "stdlib.h"#include <string.h>struct Stu{ char name[32]; int age;};int main(){/**************************** 基本用法 **********************************/ //申請一個int類型 int *p1 = new int; //直接申請賦值 int* p1 = new int(3); int *p2 = (int*)malloc(sizeof(int)); //申請一個char類型 char *p3 = new char; //直接申請賦值 char *p3 = new char('c'); char *p4 = (char*)malloc(sizeof(char)); //申請一個int型一維數(shù)組 int *p5 = new int[5]; //直接申請賦值 int *p5 = new int[5]{1,2,3,4,5}; int *p6 = (int*)malloc(sizeof(int)*5); //申請一個char型一維數(shù)組 char* p7 = new char[6]; //直接申請賦值 char* p7 = new char[3]{'a', 'v', 'c'}; char* p8 = (char*)malloc(sizeof(char)*6); //申請一個int型二維數(shù)組 int(*p9)[2] = new int[2][2]; //直接申請賦值 int(*p9)[2] = new int[2][2]{ 1,2,3,4 }; int(*p10)[2] = (int(*)[2])malloc(sizeof(int)*2*2); //申請一個char型二維數(shù)組 char(*p11)[2] = new char[2][2]; char(*p12)[2] = (char(*)[2])malloc(sizeof(char)*2*2);/***************************** 申請二級指針內(nèi)存 **********************************/ //申請二級指針(new,delete) char** p13 = new char*[2]; p13[0] = "aaaaaaaaaa"; p13[1] = "vvvvvvvvvv"; delete p13; //申請二級指針(malloc, free) char** p14 = (char**)malloc(sizeof(char*)*2); p14[0] = "cccccccc"; p14[1] = "dddddddd"; delete p14;/****************************** 申請結(jié)構(gòu)體內(nèi)存 *********************************/ //new delete Stu* pStu1 = new Stu; Stu* pStu2 = new Stu{"wpf", 10}; Stu* pStu3 = new Stu[1024]; delete pStu1; delete pStu2; delete[] pStu3; //malloc free Stu* pStu4 = (Stu*)malloc(sizeof(Stu)); memset(pStu4, 0, sizeof(Stu)); free(pStu4); getchar();}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對武林網(wǎng)的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 柳林县| 滦平县| 平武县| 高碑店市| 台山市| 镇雄县| 耒阳市| 东港市| 酒泉市| 突泉县| 康定县| 鄂州市| 广平县| 黄浦区| 高唐县| 安仁县| 方城县| 台前县| 开化县| 津南区| 资中县| 望都县| 阳信县| 凌云县| 灵石县| 广元市| 克东县| 新泰市| 西青区| 石首市| 永丰县| 固始县| 云龙县| 精河县| 酒泉市| 阿拉善盟| 内乡县| 桂林市| 伽师县| 原平市| 长治县|