c中malloc和free是函數,包含在stdlib.h頭文件中,分配成功返回指針,失敗返回空指針。
與new的區別是:
1,malloc與free是C++/C語言的標准庫函數,new/delete是C++的運算符。它們都可用於申請動態內存和釋放內存。
2,對於非內部數據類型的對象而言,光用maloc/free無法滿足動態對象的要求。對象在創建的同時要自動執行構造函數,對象在消亡之前要自動執行析構函數。由於malloc/free是庫函數而不是運算符,不在編譯器控制權限之內,不能夠把執行構造函數和析構函數的任務強加於malloc/free。
3,因此C++語言需要一個能完成動態內存分配和初始化工作的運算符new,以一個能完成清理與釋放內存工作的運算符delete。注意new/delete不是庫函數。
4,C++程序經常要調用C函數,而C程序只能用malloc/free管理動態內存。
(摘自http://zhidao.baidu.com/link?url=IrwYsOm_ykBlbfF3DCsfeKwNj2bfwahMKa501_hS7cgrrNk5DAeu11devGzHpWv9NsfLmwlX6Bp14BjuNB-Exa)
代碼使用如下:
1 #include <iostream> 2 #include <fstream> 3 #include<stdlib.h> 4 #define MAXNUM 200 5 int Isood(int n); 6 7 using namespace std; 8 9 10 int main(void) 11 { 12 int n; 13 cout<<"input n:"; 14 cin>>n; 15 16 int *p; 17 p=(int *)malloc(n*sizeof(int)); 18 for(int i=0;i<n;i++) 19 { 20 p[i]=i; 21 } 22 for(int i=0;i<n;i++) 23 { 24 cout<<p[i]<<" "; 25 } 26 27 free(p); 28 }
#include <iostream> #include <fstream> #include<stdlib.h> #define MAXNUM 200 int Isood(int n); using namespace std; int main(void) { int *p=new int; int a=3; p=&a; cout<<*p<<endl; delete p; // cout<<*p; int *q=new int [3]; q[0]=0; q[1]=1; *(q+2)=3; cout<<q[0]<<endl; cout<<*(q+2); delete [] q; }