char** a; a=(int**)malloc(sizeof(char*)*2);の実行により8バイトメモリが動的に確保されます それらのメモリを解放してみます

ソーラー「


やったね


char型の変数のアドレスを格納するchar*型のポインタ変数のアドレスを格納するchar**型のポインタ変数


を用いて


メモリを確保することができました」


solarplexuss「char**型のポインタ変数を使って


メモリを確保できちゃったい


すごい進歩したね」


ソーラー「そうだね


まだまだ面白くなるのはこれからさ!


ソーラー「


char**型のポインタ変数を使って動的にメモリを確保することができました




char** a;

a=(char**)malloc(sizeof(char*)*2);


が実行されると


malloc(sizeof(char*)*2)


により

char*は4バイトのデータ格納容量を持つため


8バイト分のメモリが確保されます


そのメモリの先頭のアドレスが


戻り値として


malloc(sizeof(char*)*2)


に返されることになるのですが


malloc(sizeof(char*)*2)をchar**型にキャストすることにより


char**型のポインタ変数aに動的に確保したメモリの先頭のアドレスを代入することができます


aはchar**型のポインタ変数なのですが


ポインタ変数なので


          このように


   💖char**型のポインタ変数aにアドレスが代入されると💖



aに[]演算子を用いた


char*型のポインタ変数

a[0]

a[1]

を生成しchar型のポインタ変数のアドレスデータを代入することができましたね


ところで


みなさん


動的にメモリを確保するとコンピュータはそれらのメモリに


アクセスして使用することができなくなります


あんまり


動的にメモリを確保しすぎるとコンピュータは利用できるメモリが少なくなりフリーズをおこす可能性があります


そこで


動的に確保したメモリに格納されたデータを使用したなら


コンピュータが利用できるメモリを増やすために


動的に確保したメモリを解放してあげるというわけです



char**型のポインタ変数aを使って


char** a;

a=(char**)malloc(sizeof(char*)*2);


のように


動的にメモリを確保したなら


動的に確保したメモリを解放するには


free(a);


を実行します


free(a);


が実行されると


動的に確保したメモリは解放され


コンピュータはそれらのメモリを再び使用できることになりますが


このとき


char**型のポインタ変数aは消去されませんが


char**型のポインタ変数aに格納されていたアドレスデータは消去されます


char*型のポインタ変数

a[0]

a[1]

を生成しchar型のポインタ変数のアドレスデータを


a[0]

a[1]

をつかって


動的にメモリに格納していたなら


それらのメモリに格納されていたchar型のポインタ変数のアドレスデータも消去されます


では実際に

char**型のポインタ変数aを使って動的にメモリを確保し


free(a);


を実行して動的に確保されたメモリを解放してみようよ


そのプログラムはこちらです

👇

#include <stdio.h>

#include <stdlib.h> /* malloc関数を用いるにはヘッダファイル<stdlib.h>をインクルードします*/


int main(void) {


char** a;


a = (char**)malloc(sizeof(char*)*2);

//malloc関数を用いてメモリを8バイト分確保しています


char b=1;

char c=2;


a[0]=&b;

a[1]=&c;


free(a);

return 0;

}


ビルド実行結果

何も表示されません


ソーラー「ビルド実行結果に


何も表示されていませんが


char**型のポインタ変数aを使って動的に確保されたメモリは


free(a);


の実行により解放されています


このとき


char*型のポインタ変数

a[0]

a[1]

を生成しchar型のポインタ変数b,cのアドレスデータ&b,&cを


a[0]=&b;

a[1]=&c;

をつかって


動的に確保したメモリに格納していましたが


動的に確保したメモリに格納されていたアドレスデータ&b,&c


もメモリから消去されています」


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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る