1. 程式人生 > >C語言中的malloc/free與C++中的new/delete的區別

C語言中的malloc/free與C++中的new/delete的區別

有以下不同:

(1)new、delete 是操作符,可以過載,只能在C++中使用。
(2)malloc、free是函式,可以覆蓋,C、C++中都可以使用。
(3)new 可以呼叫物件的建構函式,對應的delete呼叫相應的解構函式。
(4)malloc僅僅分配記憶體,free僅僅回收記憶體,並不執行構造和解構函式
(5)new、delete返回的是某種資料型別指標,malloc、free返回的是void指標。

 注意:malloc申請的記憶體空間要用free釋放,而new申請的記憶體空間要用delete釋放,不要混用。因為兩者實現的機理不同。

相關推薦

C言中malloc/freeC++new/delete區別

1. malloc()函式1.1 malloc的全稱是memory allocation,中文叫動態記憶體分配。原型:extern void *malloc(unsigned int num_bytes); 說明:分配長度為num_bytes位元組的記憶體塊。如果分配成功則返回指向被分配記憶體的指標,分配失敗

C言中exit(0)exit(1)有什麼區別

今天天氣有點冷,當我在寫訊息佇列的程式的時候,遇到了結束程序的這個問題,突然腦海裡有點混亂,我是用_exit(),還是用exit(1),還是用exit(0)呢,然後自己度娘了一下,整理了一下稍微做

C言中malloc/freeC++new/delete區別

有以下不同: (1)new、delete 是操作符,可以過載,只能在C++中使用。(2)malloc、free是函式,可以覆蓋,C、C++中都可以使用。(3)new 可以呼叫物件的建構函式,對應的de

C言中 mallocfree

from:http://blog.sina.com.cn/s/blog_af1a77fa0102xceb.html 一、malloc()和free()的基本概念以及基本用法: 1、函式原型及說明: void *malloc(long NumBytes):該函式分配了NumBytes個位元

C言中malloc函數的理解

萬能 一個 函數 語言 就是 有一個 類型轉換 har 扯淡 在C語言中malloc函數主要是用在堆內存的申請上,使用malloc函數時,函數會返回一個void *類型的值,這個值就是你申請的堆內存的首地址;為什麽返回的地址是一個void *類型的地址呢?首先我們要先弄明白

關於c言中malloc和remalloc函式的分析

首先申明,這是本人第一次寫部落格,其目的僅僅是為了加強自己對知識點的掌握,為到達在本子上記筆記的效果 進入正題。對於malloc,它的作用就是為了動態分配空間,像c++中的new一樣。這裡就不說他們兩的區別了。malloc函式有這樣幾個特點。 1.分配的空間地址是連續的,

C言中的printfscanf函式

轉載李明傑老師的部落格:地址:http://www.cnblogs.com/mjios/archive/2013/03/14/2960199.html 本文目錄 說明:這個C語言專題,是學習iOS開發的前奏。也為了讓有面向物件語言開發經驗的程式設計師,能夠快速上手C語言。

c言中char *name char name 的區別

要點:char* name="abc"指的是常量字串,不可以修改指標,是相容老的寫法;char[] name="abc"是指標,可以修改;在學習過程中發現了一個以前一直預設的錯誤,同樣char *c = "abc"和char c[]="abc",前者改變其內容程式是會崩潰的,

C言中的strlensizeof的區別

sizeof與strlen是有著本質的區別,sizeof是求資料型別所佔的空間大小,而strlen是求字串的長度,字串以/0結尾。區別如下: (1) sizeof是一個C語言中的一個單目運算子,而strlen是一個函式,用來計算字串的長度。 (2)sizeof求的是資

C言中 unsigned char signed char 不同輸出格式一些認識

首先考慮下面程式碼輸出什麼? #include <stdio.h> int main(void) { signed char a = -1; unsigned char b =

C言中char s[]char *s的不同

首先看一下C語言中下面兩個語句的不同: char s[10] = “abcde"; char *s = "abcde"; 兩者不同的關鍵點如下: (1)陣列 char s[10] = "abcde" s是一個數組; sizeof(s) = 10 bytes a與&a是一樣的 abcd

C言中malloc、calloc、realloc動態記憶體分配的理解

void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(size_t numElements, size_t sizeOfElement); 都在stdlib.h函式庫內 它們的返回值都是請求系

關於C言中a=a++a=++a的研究

今天逛論壇,發現有朋友對a++與++a的結果有爭議,由於自己也不清楚,就決定反彙編一下,看看是什麼原因,過程如下: 問題: int a=3; a=a++; 輸出結果a=3 研究過程: 自己寫了下原始碼:反彙編(為了能看明白,我加了些註釋,並劃分了五個區域):從第二個區域可以

C言中 .h檔案和.c檔案的區別

要理解.c檔案與.h檔案有什麼不同之處,首先需要弄明白編譯器的工作過程,一般說來編譯器會做以下幾個過程: 1.預處理階段 2.詞法與語法分析階段 3.編譯階段,首先編譯成純彙編語句,再將之彙編成跟CPU相關的二進位制碼,生成各個目標檔案 4.連線階段,將各個目標檔案中的各段程式碼進行絕對地址定位,生成跟特定平

C言中scanf(),sscanf(),fscanf()的用法和區別

scanf(),sscanf(),fscanf()區別: 第一個是從控制檯(鍵盤)輸入; 第二個是從字串輸入; 第三個是從檔案輸入; scanf scanf()函式根據由format(格式)指定的格式從stdin(標準輸入)讀取,並儲存資料到其它引數.   int main

C言中 .h檔案和.c檔案的區別 (轉)

要理解.c檔案與.h檔案有什麼不同之處,首先需要弄明白編譯器的工作過程,一般說來編譯器會做以下幾個過程:1.預處理階段2.詞法與語法分析階段3.編譯階段,首先編譯成純彙編語句,再將之彙編成跟CPU相關的二進位制碼,生成各個目標檔案4.連線階段,將各個目標檔案中的各段程式碼進行絕對地址定位,生成跟特定平臺相關

C言中free()函數釋放struct結構體的規律

void poi inf clu main 圖片 刪除 動態分配 不同 並不是什麽新鮮的事情,不過值得註意。首先我們知道,在使用struct來定義並聲明一個變量時,將會自動劃分出一個連續的儲存空間(雖然根據某些對齊原則會出現內存間隙,但是大體上來說還是連續的)這一塊連續空間

Python的字典C言中的switch結構類比

       題目中用了類比而不是對比,因為我覺得我想要的並不是他們兩者之間的差異,而是想在Python中找到一種方式能夠完全代替C語言中的switch結構。        之前使用字典功能模擬switch結構的時候總覺得有點缺憾,因為自己還要構造switch的defau

C言中mallocfree造成記憶體洩露?

      首先,說一下我對記憶體洩露的理解,記憶體洩露是指:程式中一塊不再使用的記憶體沒有被釋放,造成記憶體保持佔用狀態,使作業系統不能將記憶體分配給其它的程式(程序)。在C語言,用的最多的管理記憶體的函式莫過於malloc和free了,下面我用VC6.0做了一個小測試,原

C言中switch...case語句break的重要性

不能 實現 比例 重要性 case語句 毫無 ... 應該 switch 在C語言中switch...case語句是經常用到的,下面我介紹一下在使用該語句時候需要註意的一個細節問題。話不多說,直接舉例子: 例子1: switch(fruit) { case 1:printf