構造体を動的確保する
構造体型配列を動的確保する場合も通常の配列の動的確保と同じです。
mallocでサイズ*要素数分のメモリを確保します。
また、ここでは紹介していませんが自己参照構造体と言って、構造体にメンバとして構造体へのポインタを持たせる方法もあります。
サンプルコード
以下がサンプルコードです。
dinamic_allocation_sample1.c
#include <stdio.h> #include <stdlib.h> typedef struct { int i; char c; double d; }sample_str; int main(void) { int i; sample_str *s; size_t elm_size = sizeof(sample_str); int elm_num = 5; s = malloc(elm_size * elm_num); for (i = 0; i < elm_num; i++) { s[i].i = i; s[i].c = 'a' + i; s[i].d = i * 1.5; printf("s[%d] %d %c %.1lf\n", i, s[i].i, s[i].c, s[i].d); } free(s); return 0; }
size_t elm_size = sizeof(sample_str)
で変数elm_sizeに構造体のサイズを格納しています。
構造体のサイズはメンバ変数のサイズの合計です。
s = malloc(elm_size * elm_num)
でメモリを確保しています。
サイズは構造体のサイズ*構造体の要素数です。
メンバへのアクセスは通常の構造体配列と同じように行ないます。