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

Slides:



Advertisements
Similar presentations
アルゴリズムと データ構造 第 3 回 基本的なデータ構造(2) : 配列 1. 前回の復習 アルゴリズムの計算量 最悪(最大)計算量 計算量の漸近的評価 (オーダ)  多項式時間アルゴリズム( polynomial time algorithm )  指数時間アルゴリズム( exponential.
Advertisements

C 言語講座 第 7 回 ポインター. メモリとアドレス(ポインターの前 に) コンピュータのメモリには 1 バイトずつ 0 番地、 1 番地、 2 番地・・・というように 住所が割り当てられている この住所をアドレスという。 メモリはデータをしまうもので それを引き出すためには メモリに番号(アドレス)を振っておけばよいな.
ISD実習E 2009年6月29日 LISPシステム入門 (第5回) 関数ポインタ eval システム関数.
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
プログラミング入門2 第10回 動的な領域確保 情報工学科 篠埜 功.
データ構造とアルゴリズム 第10回 mallocとfree
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
C言語講座 第4回 ポインタ.
第8回 プログラミングⅡ 第8回
第4回放送授業.
アルゴリズムとデータ構造 第2回 線形リスト(復習その2).
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
演習問題の答え #include #include #define NUM 5 typedef struct { // 構造体の定義 float shincho; // 身長 float taiju; // 体重 } shintai; void hyouji(shintai.
プログラミングII 第 7 回 オブジェクトの配列 New, delete 参照 田向.
第3回 配列,構造体,ポインタ ~ データ構造について学ぶための基礎~
プログラミング論 関数ポインタ と 応用(qsort)
プログラミング2 関数
プログラミング論 ファイル入出力
関数とポインタ 値呼び出しと参照呼び出し swapのいろいろ 関数引数 数値積分
Cプログラミング演習 第7回 メモリ内でのデータの配置.
iioLoadFile()とiioMallocImageBuffer()の補足
iioLoadFile()とiioMallocImageBuffer()の補足
精密工学科プログラミング基礎 第10回資料 (12/18実施)
プログラミング 4 記憶の割り付け.
アルゴリズムとデータ構造 補足資料11-1 「mallocとfree」
2005年度 データ構造とアルゴリズム 第3回 「C言語の復習:再帰的データ構造」
プログラミング入門2 第11回 情報工学科 篠埜 功.
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
高度プログラミング演習 (08).
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
プログラミング論 ファイル入出力
データ構造と アルゴリズム 第五回 知能情報学部 新田直也.
オブジェクト指向プログラミングと開発環境
配列変数とポインタ 静的確保と動的確保 ポインタ配列 2次元配列 時間計測 第1回レポートの課題
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
精密工学科プログラミング基礎Ⅱ 第5回資料 今回の授業で習得してほしいこと: 構造体 (教科書 91 ページ)
11: 動的メモリ確保 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
文字列へのポインタの配列 static char *lines[MAXLINES]; lines[0] NULL
ポインタとポインタを用いた関数定義.
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 11.5 関数引数
11: 動的メモリ確保 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページを開いておく こと
ネットワーク・プログラミング Cプログラミングの基礎.
第5回 プログラミングⅡ 第5回
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
11: 動的メモリ確保 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
コンパイラ 第12回 実行時環境 ― 変数と関数 ― 38号館4階N-411 内線5459
11: 動的メモリ確保 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
プログラミング演習I 2003年6月11日(第9回) 木村巌.
2005年度 データ構造とアルゴリズム 第2回 「C言語の復習:配列」
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
TList リスト構造とは? 複数のデータを扱うために、 データの内容と、次のデータへのポインタを持つ構造体を使う。
プログラミング演習II 2003年10月29日(第2,3回) 木村巌.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング 3 ポインタ(1).
プログラミング 2 静的変数.
Presentation transcript:

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

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

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

動的変数: コンパイル時にはメモリのサイズがわからず、 実行時に判るもの。 ポインタを使ったメモリの準備方法 動的なメモリの準備 動的変数: コンパイル時にはメモリのサイズがわからず、 実行時に判るもの。 ポインタを使ったメモリの準備方法 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

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

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

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

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

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

関数 メイン関数内で他の関数が呼ばれると、 メイン 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

関数 メイン関数内で他の関数が呼ばれると、 メイン 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