herrDeng網內搜尋

自訂搜尋

Ads

2008年10月9日 星期四

C++

malloc, free => c++?

53 則留言:

匿名 提到...

C++是 new和delete

匿名 提到...

C
malloc(配置記憶體空間)
free(釋放配置的記憶體空間)

C++
new(配置記憶體空間)
delete(釋放配置的記憶體空間)

匿名 提到...

malloc -> new
free ->  delete

匿名 提到...

在C語言中用malloc()來配置動態記憶體,用free()來釋放記憶體;在C++中則使用new配置動態記憶體,用delete釋放記憶體資源。

匿名 提到...

C語言是使用malloc和free

C++則是使用new和delete

new 跟delete 是 C++ 中的關鍵字
new 功能在分配記憶體,傳回位址。
delete 是釋放空間.

匿名 提到...

C++以 new 取代C語言 malloc函式
C++以 delete 取代C語言 free函式

匿名 提到...

C++以 new取代C語言 malloc函式
C++以 delete取代C語言 free函式

匿名 提到...

C++ new 等於C語言 malloc函式
C++ delete 等於C語言 free函式

匿名 提到...

在C++中,要動態配置記憶體,是用new來配置,如果要釋放動態配置記憶體,用delete來釋放。

語法簡單介紹如下:
資料型別*ptr; //宣告指標
ptr=new 資料型別; //動態配置記憶體
delete ptr; //釋放動態配置記憶體

在C++要動態配置記憶體之前,必須先宣告一個指標變數(ptr)用來指向要配置的記憶體的資料型別,接著再透過new向系統動態要求一塊記憶體,就可以透過指標來操作資料,如果不再使用動態配置記憶體時,用delete釋放指定的記憶體指標。

匿名 提到...

C語言是使用malloc和free
C++則是使用new和delete

匿名 提到...

c語言使用malloc()函式來配置動態記憶體,用free()函式釋放記憶體資源 c++則是用new配置動態記憶體,用delete釋放記憶體資源

匿名 提到...

在C++裡使用new配置動態記憶體,取代了Malloc在C語言中用來配置動態記憶體;在C++裡透過delete釋放記憶體資源,取代了free在C語言中用來釋放記憶體資源。

匿名 提到...

以 new 取代 malloc(),
以 delete 取代 free().

匿名 提到...

new和delete

匿名 提到...

在C++的型態裡面
malloc是以new動態配置記憶體來取代
free則是以delete釋放記憶體資源

匿名 提到...

C++的new指令是用來動態配置記憶體的,其格式如下。New會依所指定的型別與陣列大小配置一塊等大的記憶體,如果有指定的話,並為其設定初值,最後傳回該塊記憶體的起始位址,由於傳回位址值,故通常需用一此指定資料類型的指標來接收並儲存 new 所傳回的記憶體位址,以定位並能透過此指標來存取資料至所配置的記憶體空間。
動態配置陣列的傳回值即為陣列第一個元素的起始位址,故如用指標來接收,此指標即相當於靜態配置時的陣列名,使用上可如同靜態配置的陣列,例如用[ ]來存取 array elements。
配置單一變數(物件)格式:
變數型別* 指標 = new 變數型別; //不指定初值
變數型別* 指標 = new 變數型別;(初始值) //指定初值
例:
int *p1 = new int;
double *p2;
p2 = new double(3.14159);
配置陣列格式:
  變數型別 *指標名 = new 變數型別[陣列長度]; //一維陣列

//多維陣列
變數型別(*指標名)[陣列長度 2] = new 變數型別[陣列長度 1] [陣列長度 2];
  變數型別(*指標名)[陣列長度 2] [陣列長度 3] = new 變數型別[陣列長度 1][陣列長度 2] [陣列長度 3];
例:
int *p3 = new int[10];
double (*p4)[4] = new double[3][4];
double (*p5)[4][5] = new double[3][4][5];
注意要點:
1. 如果記憶體空間不夠而導致配置失敗,則 new 會傳回NULL值(0),以表示配置失敗。配置失敗通常會造成程式執行時的錯誤,我們應養成檢查是否配置失敗的習慣。
2. 使用動態記憶體配置一維陣列,其長度可以使用一含未知值的變數,所產生陣列的長度是程式執行到此記憶體配置命令時,此變數的值而定。
3. 動態配置多維陣列時,第一維的長度可以是一含未知值的變數,但二維以上的長度必須是已知的數值(或常數),且每一維的長度均不可省略。

動態配置的記憶體與靜態宣告的變數或陣列不同,一旦動態配置了某塊記憶體,該配置記憶體將一宜存在保留著,不會遵守 scope rule ,一直到程式結束為止,除非我們使用 delete 指令來將該配置記憶體釋放。
delete 是針對指標內所存的記憶體位址,而非指標。當以 new 做記憶體配置時,系統會將此配置記憶體的初始位址,業及配置的相關資訊,如配置空間大小,紀錄於一配置表中,當以 delete 欲對某記憶體位址做釋放時,系統會至配置表中尋找此位址,並依配置的相關資訊釋放此配置空間,但如果欲 delete 的位址並沒有紀錄於配置表中,則會產生 runtime 時的錯誤(異常終止)。
格式:
   delete 指標; //釋放非陣列的記憶體配置空間
   delete[] 指標; //釋放陣列的記憶胼配置空間
例:
  delete p1;
delete[] p3;
delete[] p4;
注意要點:
1. 不可以 delete 未經記憶體配置的位址(不在配置表中的位址)。
2. 一被釋放記憶體的指標,只是其所指的記憶體空間被釋放,此指標於程式中依然存在,可對其再進行記憶體配置。
3. 一經 delete 指令釋放記憶體的指標,其值並不是 NULL (與記憶體配置失敗不同),而是指到相同位址,只不過該位址的記憶體配置已由釋放,所存資料消失。
4. 如一指到有記憶體配置的指標,未經記憶體釋放,就對其進行新的記憶體配置,則此指標將會指到新配置的記憶體空間,且之前所指的記憶體空間,雖已無指標定其位,但依然存在,程式結束前不會消失。
5. 如寫一大型程式,對不再使用的記憶體空間應使用 delete 來釋放出來供其他程式部分使,要回點4的情形應避免造成 memory leak。

匿名 提到...

在C++的型態中,malloc是以new動態配置記憶體空間來取代,free則是以delete釋放配置的記憶體資源。

匿名 提到...

free是以delete 釋放記憶體資源
malloc是以new 動態配置記憶體來取代

匿名 提到...

#include < stdio.h >

#include < conio.h >

#include < stdlib.h >

#define KeyWord 0

struct list

{

int score;

struct list *next;

};

typedef struct list node;

typedef node *link;



main()

{

link newnode = NULL;

link ptr, delptr;

int i;

printf(" 請輸入分數 : ");

scanf("% d",& i);

while ( i!= KeyWord ){

delptr=(link )malloc( sizeof (node ));

if ( newnode = = NULL )

newnode = delptr;

else

ptr - > next = delptr;

delptr - > score = i;

delptr->next = NULL;

printf("請輸入分數:");

scanf("% d",& i);

ptr=delptr;

}





ptr = newnode;

while(ptr! = NULL)

{

printf("\n成績:%d\n",ptr - > score);

delptr = ptr;

ptr=ptr- > next;

free(delptr);

}

getch();

}

匿名 提到...

malloc函式=>C++以 new 取代C語言
free函式=>C++以 delete 取代C語言

匿名 提到...

malloc Gbox===(link)malloc(sizeof(node));

free(x); 直接環記憶體

匿名 提到...

c語言中的malloc,free相當於c++中的new,
delete new 功能在分配記憶體 delete 是釋放空間

匿名 提到...

C語言是使用malloc和free,

C++則是使用new和delete

匿名 提到...

malloc是用來動態配置一塊記憶體空間,free是將此塊記憶體釋放掉歸還給系統。

匿名 提到...

在C++裡面
malloc 以new為取代
free則是以delete來取代

匿名 提到...

還有一種是這樣
C:malloc C++:new
C:free   C++:delete

匿名 提到...

C語言的malloc()同等於C++裡的 new
而C語言的free()同等於C++裡的 delete

匿名 提到...

C的malloc()等於C++的new
C的free()等於C++的delete

匿名 提到...

C語言malloc()等於C++的new

C語言free()等於C++的 delete

匿名 提到...

malloc() =C++的new
free() =C++的delete

匿名 提到...

在C++要動態配置記憶體時 要先宣告一個指標變數(ptr)用來指向要配置記憶體的資料型態
接著在透過new向系統動態要求記憶體
如果不在使用動態配置記憶體時 用delete釋放指定的記憶體指標 才不會浪費記憶體空間

資料型別*ptr; //宣告指標
ptr=new 資料型別; //動態配置記憶體
delete ptr; //釋放動態配置記憶體

匿名 提到...

c語言的malloc()同等於c++裡的 new


c語言的free()同等於c++裡的 delete

匿名 提到...

在C++中
malloc等於new,動態配置記憶體來取代
free等於delete,釋放記憶體資源

匿名 提到...

int * p , n , i , snum , num = -1 ;
printf ( " 要輸入幾個整數 : " ) ;
scanf ( " %d " ,&n );
p = ( int * ) malloc ( sizeof ( int ) * n ) ;
for ( i = 0 ; i < n ; i++ )
{

printf ( " 第 %2d 個整數: " , i+1 ) ;

scanf ( " %d " , p + i ) ;

}

printf ( " \n " ) ;
printf ( " 輸入要搜尋的數值 : " ) ;
scanf ( " %d " , &snum ) ;
for ( i = 0 ; i < n ; i++ )

{

if ( * ( p + i ) = = snum )

{

nume = 1 ;

}


}

printf ( " ==================== \ n" ) ;
if ( num == -1 )
{
printf ( " 沒這個數字->%d\n " ,snum ) ;

}

else

{

printf ( " %d 是第 %d 個數字!\n " , snum , ( num + 1 ) ) ;

}

free ( p ) ;

匿名 提到...

#include < cstdlib >
#include < iostream >

using namespace std;

int main( int argc, char *argv[] )
{
int *p,n,i,snum,num=-1;
printf ( "要輸入幾個整數:" ) ;
scanf ( "%d",&n ) ;
p= ( int*) malloc ( sizeof ( int )*n );
for( i=0;i < n;i++ )
{
printf( " 第%2d 個整數 : ",i+1 );
scanf( "%d",p+i );
}
printf( "\n" );
printf( " 輸入搜尋數字:" );
scanf( "%d",&snum );
for ( i=0;i < n;i++ )
{
if ( * ( p+i ) == snum )
{
num=1;
}
}
printf( "===========================\n");
if ( num==-1 )
{
printf( "沒有這數字->%d\n",snum );
}
else
{
printf("%d 是第 %d 個數字!\n", snum, ( num+1 ) ) ;
}
free ( p ) ;




system ( "PAUSE" ) ;
return EXIT_SUCCESS;

匿名 提到...

C++以 new 來取代C語言中的 malloc函數
C++以 delete 來取代C語言中的 free函數

匿名 提到...

new 跟 delete 是 C++ 中的關鍵字. new 功能在分配記憶體 (class 的話好像可以初始), 傳回位址. delete 是釋放空間.

malloc() 和 free() 是 C library 中的基本 function. malloc() 功能在分配記憶體, 傳回位址. free() 是釋放空間.

匿名 提到...

malloc()函式為動態配置記憶體,呼叫此函式時會配置所指定的的記憶體空間大小,和一般陣列在編譯階段配置記憶體不同。若配置成功,則傳回值設為指向void資料型別的指標,若記憶體空間不足,則會傳回NULL值。
free()函式為釋放記憶體,若動態配置的記憶體不再使用時,必須使用此函式釋放掉歸還給系統,才不會浪費記憶體空間。

匿名 提到...

C語言 malloc函式C++用 new 取代
free函式C++用 delete 取代

匿名 提到...

C ==> C++
malloc ==> new

free ==> delete

匿名 提到...

malloc()=C++的new
free()=C++的delete
int end=clock();
int t=end-start;
double r=n*log(n)*log(n);
r=t/r;
printf("n= %d\t elapsed time T:%d msec\
\t Ratio T/f %10.10f\n", n,t,r);
}
int main(){
int i;
int step=1000000;
for(i=step; i<=20000000; i+=step)
run(i);

匿名 提到...

c語言的malloc() = c++的new

c語言的free() = c++的delete

匿名 提到...

C ==> C++
malloc是new free是delete

匿名 提到...

C++以 new取代C語言 malloc函式
C++以 delete取代C語言 free函式

匿名 提到...

C++以 new取代C語言 malloc函式
C++以 delete取代C語言 free函式

匿名 提到...

C語言是使用malloc和free,
C++則是使用new和delete。

匿名 提到...

C++ 以 new 取代C語言 malloc 函式
C++ 則以 delete 取代C語言 free 函式

匿名 提到...

C++ 以 new 取代C語言 malloc 函式
C++ 則以 delete 取代C語言 free 函式

匿名 提到...

C++以 new取代C語言 malloc函式
C++以 delete取代C語言 free函式

匿名 提到...

C語言是使用malloc和free
C++則是使用new和delete

匿名 提到...

在C++裡面
malloc 以new為取代
free 以delete來取代

匿名 提到...

malloc → new
free → delete

匿名 提到...

C++
new(配置記憶體空間)
delete(釋放配置的記憶體空間)

Related Posts Plugin for WordPress, Blogger...

熱門文章