網頁

2008年10月9日 星期四

C++

malloc, free => c++?

53 則留言:

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

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

    回覆刪除
  2. malloc -> new
    free ->  delete

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

    回覆刪除
  4. C語言是使用malloc和free

    C++則是使用new和delete

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

    回覆刪除
  5. C++以 new 取代C語言 malloc函式
    C++以 delete 取代C語言 free函式

    回覆刪除
  6. C++以 new取代C語言 malloc函式
    C++以 delete取代C語言 free函式

    回覆刪除
  7. C++ new 等於C語言 malloc函式
    C++ delete 等於C語言 free函式

    回覆刪除
  8. 在C++中,要動態配置記憶體,是用new來配置,如果要釋放動態配置記憶體,用delete來釋放。

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

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

    回覆刪除
  9. C語言是使用malloc和free
    C++則是使用new和delete

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

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

    回覆刪除
  12. 以 new 取代 malloc(),
    以 delete 取代 free().

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

    回覆刪除
  14. 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。

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

    回覆刪除
  16. free是以delete 釋放記憶體資源
    malloc是以new 動態配置記憶體來取代

    回覆刪除
  17. #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();

    }

    回覆刪除
  18. malloc函式=>C++以 new 取代C語言
    free函式=>C++以 delete 取代C語言

    回覆刪除
  19. malloc Gbox===(link)malloc(sizeof(node));

    free(x); 直接環記憶體

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

    回覆刪除
  21. C語言是使用malloc和free,

    C++則是使用new和delete

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

    回覆刪除
  23. 在C++裡面
    malloc 以new為取代
    free則是以delete來取代

    回覆刪除
  24. 還有一種是這樣
    C:malloc C++:new
    C:free   C++:delete

    回覆刪除
  25. C語言的malloc()同等於C++裡的 new
    而C語言的free()同等於C++裡的 delete

    回覆刪除
  26. C的malloc()等於C++的new
    C的free()等於C++的delete

    回覆刪除
  27. C語言malloc()等於C++的new

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

    回覆刪除
  28. malloc() =C++的new
    free() =C++的delete

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

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

    回覆刪除
  30. c語言的malloc()同等於c++裡的 new


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

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

    回覆刪除
  32. 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 ) ;

    回覆刪除
  33. #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;

    回覆刪除
  34. C++以 new 來取代C語言中的 malloc函數
    C++以 delete 來取代C語言中的 free函數

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

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

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

    回覆刪除
  37. C語言 malloc函式C++用 new 取代
    free函式C++用 delete 取代

    回覆刪除
  38. C ==> C++
    malloc ==> new

    free ==> delete

    回覆刪除
  39. 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);

    回覆刪除
  40. c語言的malloc() = c++的new

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

    回覆刪除
  41. C ==> C++
    malloc是new free是delete

    回覆刪除
  42. C++以 new取代C語言 malloc函式
    C++以 delete取代C語言 free函式

    回覆刪除
  43. C++以 new取代C語言 malloc函式
    C++以 delete取代C語言 free函式

    回覆刪除
  44. C語言是使用malloc和free,
    C++則是使用new和delete。

    回覆刪除
  45. C++ 以 new 取代C語言 malloc 函式
    C++ 則以 delete 取代C語言 free 函式

    回覆刪除
  46. C++ 以 new 取代C語言 malloc 函式
    C++ 則以 delete 取代C語言 free 函式

    回覆刪除
  47. C++以 new取代C語言 malloc函式
    C++以 delete取代C語言 free函式

    回覆刪除
  48. C語言是使用malloc和free
    C++則是使用new和delete

    回覆刪除
  49. 在C++裡面
    malloc 以new為取代
    free 以delete來取代

    回覆刪除
  50. malloc → new
    free → delete

    回覆刪除
  51. C++
    new(配置記憶體空間)
    delete(釋放配置的記憶體空間)

    回覆刪除

HTML 編輯器