書式#include <stdio.hに> する#include <stdlib.h>に含ま する#include < 文字列の.h> の#pragma警告(無効:4996)を CHAR * get_str4(ボイド){ チャー *のD =(チャー *)のmalloc(100 * はsizeof(CHAR)); // 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ポイントの内容をプリントアウト