Presentation is loading. Please wait.

Presentation is loading. Please wait.

メモリの準備 メモリには、その準備の方法で2種類ある。 静的変数: コンパイル時にすでにメモリのサイズがわかっているもの。 普通の変数宣言

Similar presentations


Presentation on theme: "メモリの準備 メモリには、その準備の方法で2種類ある。 静的変数: コンパイル時にすでにメモリのサイズがわかっているもの。 普通の変数宣言"— Presentation transcript:

1 メモリの準備 メモリには、その準備の方法で2種類ある。 静的変数: コンパイル時にすでにメモリのサイズがわかっているもの。 普通の変数宣言
Windows管理メモリ Test.c main() {   int a;   int data[10]; Test.exe a data

2 メモリの準備 メモリには、その準備の方法で2種類ある。 動的変数: コンパイル時にはメモリのサイズがわからず、 実行時に判るもの。
ポインタを使ったメモリの準備方法 関数 malloc()を使う。

3 malloc関数 #include <stdlib.h> または #include<alloc.h>
void *malloc(size_t size); 用意したメモリの先頭アドレスを返す。 例: data=(int *)malloc(sizeof(int)*n); if (data == NULL){ printf(“メモリエラー”); return; }

4 動的変数: コンパイル時にはメモリのサイズがわからず、 実行時に判るもの。 ポインタを使ったメモリの準備方法
動的なメモリの準備 動的変数: コンパイル時にはメモリのサイズがわからず、 実行時に判るもの。 ポインタを使ったメモリの準備方法 Windows管理メモリ Test2.c main() {   int n;   int *data; printf(“input n=”); scanf(“%d”,&n); data = (int *)malloc(sizeof(int)*n); Test2.exe n data 10 0xff20 0xff20

5 範囲外のメモリにアクセスすると Test2.exe n data Windows管理メモリ 10 0xff20 ほかのプログラム 10 10

6 静的変数: アプリケーションが終了すると、 一緒に消える。
メモリの開放 静的変数: アプリケーションが終了すると、 一緒に消える。 Windows管理メモリ Test.exe a data

7 動的変数: アプリケーションが終了すると、 ポインタは一緒に消える。
メモリの開放 動的変数: アプリケーションが終了すると、 ポインタは一緒に消える。 動的に割り当てたメモリはのこってしまう! Windows管理メモリ Test2.exe n data 10 0xff20 0xff20

8 動的変数: アプリケーションが終了するまえに、 free関数でメモリを開放しておく。
メモリの開放 動的変数: アプリケーションが終了するまえに、 free関数でメモリを開放しておく。 Windows管理メモリ Test2.exe n data 10 0xff20 free(data); 0xff20

9 #include <stdlib.h> void free(void *block); 例: free(data);

10

11 関数 メイン関数内で他の関数が呼ばれると、 メイン SWAP(int x, int y) int a,b; a = 10;b = 5;
SWAP(a,b) int c; c=x; x=y; y=c; a 10 5 b 10 5 a 10 b 5 c 10

12 関数 メイン関数内で他の関数が呼ばれると、 メイン SWAP(int *x, int *y) a 10 5 b 5 10 int a,b;
SWAP(&a,&b) int c; c=*x; x=*y; *y=c; x 0xef y 0xcf c 10

13


Download ppt "メモリの準備 メモリには、その準備の方法で2種類ある。 静的変数: コンパイル時にすでにメモリのサイズがわかっているもの。 普通の変数宣言"

Similar presentations


Ads by Google