データ構造と動的メモリ:架け橋を築く
1つの構造だけでは十分でない場合もある
構造体ポインタを使って独自のデータ型を大規模で複雑なデータ構造に連結する方法を説明する
ヒープにメモリを同的に割り当てて使い終わったらメモリを解放することでデータ量に柔軟に対応できるデータ構造を作る
valgrind
TOC
柔軟な記憶領域が必要か?
配列よりも拡張性のある仕組みが必要: 連結リスト
連結リストはデータの連鎖のようなもの
連結リストは挿入が可能
再帰構造体を作成する
Cで島を作成する
リストへの値の挿入
Q&A
他のstructへのポインタを含むstructを使っていますが、structに再帰struct全体を含めることはできますか?
できません。Cは、structのメモリ占有量を正確に知る必要があるからです。ポインタであればOKなのもメモリ占有量がわかるから。
多くの場合、プログラムが必要とする記憶領域の大きさは実行時までわかりません。......Cプログラムには、必要な時に追加の記憶領域が欲しいことをOSに通知する手段が必要です。プログラムには動的記憶領域が必要なのです。
動的記憶領域にはヒープを使う
使い終わったらメモリを返す
free()関数を呼び出してメモリを解放する
malloc()でメモリを要求する
strdup()関数を使ってコードを修正しよう
使い終わったらメモリを解放する
SPIESシステムの概要
ソフトウェア科学捜査:valgrindの利用
valgrindを繰り返し使ってさらに証拠を集める
証拠を調べる
修正の確認