Download presentation
Presentation is loading. Please wait.
Published byたみえ ありはら Modified 約 5 年前
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);
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
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.