[PR]大人気の無料恋愛コミュニティ:掲示板に写メにメールも0円使い放題



動的なメモリ確保


なーんか,動的なメモリ確保って怖いのよねー.
じゃって,わしオッコチョイ(古ッ!)じゃから,領域解放し忘れそうなんだもーん・・・

んで,こんな感じで動的なメモリ確保をしてたのよね.

  • ポインタが領域を確保してないときは,必ずNULLを指すようにしておく.
  • 逆にいえば,ポインタがNULL以外を指すときは,何かしらの領域を確保中.
    んで,この原則を守るために,実際こんな感じでコーディングしてました.

    
        // ここはプログラム開始地点と思ってね.
        // 初期化の時点でNULLを指すようにして置く.
        char * p = NULL ;
        .......
        
        // メモリ確保しよー
        // でも,ポインタが既に領域確保してるときはダメ!
        // つまり,NULL以外のときはダメ!!
        if ( p == NULL )
            p = new char ;
        ......
    
        // 領域使用するとき
        // でも確保してるときだけよん.
        if ( p != NULL ) {
            p = 100 ;
            p ++ ;
        }
        ......
        
        // 要らなくなったら,領域解放!
        // 既に確保されてるときだけよ.
        // NULLのときは解放しないように!
        // 解放したらすぐさまNULLに!
        
        if ( p != NULL ) {
            delete p ;
            p = NULL ;
        }
    
    ってしてまーす.

    そういや,「deleteはNULLを指してるポインタに関しては解放を行わない」って噂を聞いた.
    ほえー,そうにゃの?
    んじゃ,最後のメモリ確保の部分は,
    ていう部分を、
    
        // 要らなくなったら,領域解放!
        // 既に確保されてるときだけよ.
        // NULLのときはdeleteが何もしないよん
        delete p ;
        p = NULL ;
    
    って感じで,条件分岐いらない訳ね.
    まぁ,最初の方法でも問題無いと思うんだけどね.(ていうか書き直してもメリット無いね)

    あーあと,「new」ってメモリ確保に失敗しても,絶対NULLを返すってわけじゃないのねー,
    C++のバージョン(?)によっては…

    Cの 「malloc」じゃ,確保失敗時にはNULLを返すのにね

    ふーむ,それにしても結局こんなメモリ確保,解放のコーディング方法は正しいのかな?
    誰か教えてほしいなー.


    < Back to Diary.

    [PR]生年月日で2010年占い鑑定:初回無料!貴女の運命運勢を占う