メモリの1.10 4地区(ヒープ)

書式#include <stdio.hに> 
する#include <stdlib.h>に含ま
する#include < 文字列の.h>
 の#pragma警告(無効:4996)を

CHAR * get_str4(ボイド){
     チャー *のD =(チャー *)のmalloc100 * はsizeofCHAR)); // D Dスタックポインタ空間ヒープ領域を作成するための
    IF(D == NULL)         // 割り当てスペースに失敗した場合、機能はダウン実行していない、0を返す
    {
         戻りNULLと、
    }
    strcpyの(D、" ABCE " );
     リターン D;     // Dのリターンアドレス
}

INTメイン(ボイド){
     CHAR * DUI = get_str4()。
    もし(DUI!= NULL)
    {
        printf(" DUI S =%\ N- " 、DUI);
         無料(DUI)。
        DUI = NULL;
    }

    printf(" \ nを" );
    システム(一時停止)。
    リターン 0 ;
}

メモリ分析

[注:先生から彼自身の理解を説明するために、正しい場所を見ていない]

[注:このプログラムはvs2013バージョンを使用して検証される]

プレリュード1:場所コードコード領域


プレリュード2:、リテラルとしてABCEを見つけるためにグローバル変数、グローバルゾーンに保存されています


プログラム1:主な機能考慮:(メイン内のすべての変数が、この時に初期化されているアドレスを割り当て、スペースを割り当てる)スタック領域にDUIポインタ変数を作成します


2プログラムが実行される:スタック領域にするget_str4()領域を割り当てます  


3プログラムの実行:実行get_str4()関数:スタックポインタを作成可変領域d


4プログラムの実行:ヒープ領域を指定し、(dは既にメモリヒープの領域を指している)からd領域のアドレスを格納します


5プログラムの実行:Dを指摘ヒープ領域にコピー可変領域ABCE


実行プログラム6:リリースget_str4()とは、点dのアドレスを返します。

 

プログラムの実行7:(作成されたヒープ領域の内部空間に、この時間DUI点)、メモリDUI変数に配置されたコンテンツのD点


プログラムの実行8:DUIポイントの内容をプリントアウト

おすすめ

転載: www.cnblogs.com/wlstm/p/11071809.html