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

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

C++中malloc與free、new與delete的詳解與應用

2020-05-23 13:23:17
字體:
來源:轉載
供稿:網友

C++面試經常會問到關于malloc/free和new/delete的區別,網上有不同版本的解釋,這里總結下并加上個人理解和使用。

兩者相同點

  • 1.都可以申請動態堆內存。

兩者不同點

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

注意事項

  • 1.用new申請的內存,必須用delete釋放。
  • 2.用new[]申請的內存,必須用delete[]釋放。
  • 3.delete釋放內存后,指針值不變,良好的風格是釋放后指針置為NULL,如,delete p; p = NULL。
  • 4.用malloc申請的內存,必須用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型一維數組 int *p5 = new int[5]; //直接申請賦值 int *p5 = new int[5]{1,2,3,4,5}; int *p6 = (int*)malloc(sizeof(int)*5); //申請一個char型一維數組 char* p7 = new char[6]; //直接申請賦值 char* p7 = new char[3]{'a', 'v', 'c'}; char* p8 = (char*)malloc(sizeof(char)*6); //申請一個int型二維數組 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型二維數組 char(*p11)[2] = new char[2][2]; char(*p12)[2] = (char(*)[2])malloc(sizeof(char)*2*2);/***************************** 申請二級指針內存 **********************************/ //申請二級指針(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;/****************************** 申請結構體內存 *********************************/ //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();}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中西区| 海南省| 云浮市| 噶尔县| 尉犁县| 卢氏县| 蓬安县| 贵德县| 白山市| 衡水市| 左贡县| 五华县| 西安市| 唐海县| 云和县| 凌源市| 郁南县| 武鸣县| 衡山县| 清丰县| 河源市| 东台市| 垣曲县| 辛集市| 区。| 开远市| 北流市| 义马市| 邮箱| 平凉市| 襄城县| 攀枝花市| 玉屏| 盱眙县| 建德市| 定陶县| 康平县| 武邑县| 华安县| 灯塔市| 德安县|