malloc関数をつかってメモリを確保した後 free関数を使ってメモリを解放してみよう

malloc関数の説明にとりかかってみよ~

ソーラー「いよいよ  C言語を学び始めるときから


ずっと気になっていた


malloc関数の説明だね。


malloc関数を初めてみた時は


なんか重要そうな感じはしたけど


また~く意味が分からなかったんだ。


でも アレサ きみのおかげでここまでやっとこれたんだ」


アレサ「そんなことはないですの


ソーラーさんならきっとここまで自力でたどり着けたと思いますの」


ソーラー「い、いやあ ちょっと 無理~


なんせ みんなと学んでいても


それでも ここにたどりつくまでに


めちゃくちゃまちがえたからね💦


一人だと どうなっていたことか・・・(笑)


さらに まだ


まちがって理解しているところがあるかもしれない・・・


本当 助かったよ」


アレサ「ありがとうございます ソーラーさん」


ソーラー「さあ


それではmalloc関数の説明にとりかかってみようかな。」


アレサ「はいっ ソーラーさん」 


ソーラー「


例えば


scanf関数を使って


文字列データを


配列に格納するときのプログラムはつぎのようになります。


🌞    🌞    🌞


scanf関数をVisual Studioで使用するときは

#pragma warning(disable: 4996)

をプログラムの冒頭に忘れずに記述してください


🌞    🌞    🌞


#pragma warning(disable: 4996)


#include <stdio.h>


int main(void){


char hairetu[100];


scanf("%s",hairetu);


printf("%s\n",hairetu);


return 0;


}


ソーラー「このとき


このプログラムをコンパイルして


_



アンダーバーが表示されている


入力待ち受け状態のコマンドプロンプト画面で


nekoとうちこむと


nekoがprintf出力表示されます。


簡単ですね。


ここでは


neko


だけがコマンドプロンプト画面から入力されたけど


もしかしたら


nekonekodaisuki


と文字列データが入力されるかもしれないね。」


アレサ「そうなんですの」


ソーラー「このように


コマンドプロンプト画面から


入力される文字列データの量が不明のときは


このプログラムのように


char hairetu[100];


を宣言します


こうしておけば


最大で


99個の半角英数字とナル文字\0からなる文字列を


scanf関数を使ってメモリに格納することができるんだね。


おおめに配列の要素数をとったというわけなんだ。


char型の配列を使って


char hairetu[100];


が実行されたならば


char型(1バイト)×100個=100バイトのメモリが


コマンドプロンプト画面から入力された


文字列データを受け取るために確保されています。


このメモリが確保された状態は


このプログラムの実行が終了されるまで続きます。


つまり


このプログラムの実行が終了されるまで


コンピュータは


このメモリを使用することはできません。


では次のプログラムをご覧ください


#pragma warning(disable: 4996)


#include <stdio.h>


int main(void){


char hairetu[100];


scanf("%s",hairetu);


printf("%s\n",hairetu);


char str[100];


scanf("%s",str);


printf("%s\n",str);


return 0;


}


コンパイル結果


(Visual Studioの場合)

(EAZY IDECの場合)


neko(と入力すると)

neko

nyaonyao(と入力すると)

nyaonyao


ソーラー「


このプログラムでは


nekoと文字列を入力して


nekoをコマンドプロンプト画面に表示しています


その時点で


char型(1バイト)×100個=100バイトのメモリを


確保している必要はありませんが


char hairetu[100];


により確保された100バイトのメモリは


プログラムの実行が終了されるまで


確保され続け


その間は


その100バイトのメモリは


コンピュータは使用することができません。


そして


char str[100];


が実行されると


さらに


char型(1バイト)×100個=100バイトのメモリが


確保されることになります。


この合計200バイトのメモリは


プログラムの実行が終了されるまで


確保され続け


その間は


その200バイトのメモリは


コンピュータは使用することができません。


このようなことがつづいていくと


どんどんコンピュータは


メモリを使用できなくなるというわけなんだね。


使用できるメモリがなくなると


コンピュータは何もプログラムを実行することができなくなり


フリーズしてしまうというわけなんだ」













  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます