malloc勉強中(C言語)
ネットでよく見るmallocを使ったサンプルだと、「いや、いくら『実行時に決める』ったって、このプログラムじゃあその定数がハードコーディングされてるんだから、そんなん全く意味ないやん」とツッコミたくなるものばかりで、配列を定義して静的にメモリを確保するのと全然違いが分からない。
じゃあどうしようと思ってたところで、某課題で三変数の連立一次方程式の解を求めるプログラムを組んでるのだが、「あ、これを任意のm個の変数の解を求めるように変更したらどうだろう」と思い至る。で、サンプル作成中。いまここ。複数行の処理がまだできないけど、m個の要素を動的に確保するのに、最初はmallocで確保した後、インクリメンタルにreallocを使うような感じにしてみたら、結構いい感じ。
//一行のみのデータを解析する。 //ex) //$> cat test.data //2.0 1.0 3.0 10.0 // #include <stdio.h> #include <stdlib.h> #include <math.h> main(void) { double *elem_y; elem_y = (double *)malloc(sizeof(double)); char tmp[16], a; int i, j; i = j = 0; while((a = getchar()) != EOF) { if(a == ' ' && tmp[0] != '\0') { elem_y[j++] = atof(tmp); elem_y = (double *)realloc(elem_y, sizeof(double) * (j + 1)); i = 0; } else if(a != ' ') { tmp[i++] = a; } tmp[i] = '\0'; } elem_y[j] = atof(tmp); int l; for(l = 0; l <= j; l++) { printf("%d : %f\n", l, elem_y[l]); } free(elem_y); } //これをtest.binにコンパイルして、上のtest.dataをリダイレクトで入力 //$> ./test.bin < test.data //0 : 2.000000 //1 : 1.000000 //2 : 3.000000 //3 : 10.000000