変数を返却したいなら、ポインタ。ポインタを返却したいなら、ダブルポインタ。ダブルポインタを返却したいなら、トリプルポインタ。トリプルポインタを返却したいなら、設計ミス。いう感じを味わってください。NULLではない表明。漸進的に各列用のメモリを確保しながら読み込んでいきます。漸進処理1回の行数こう定義しているから128行毎(128に特別な意味はない、100でも1000でもいい)にforループを回ります。ループ毎に動的メモリ割り当てが必要になるので、ヒープ領域のメモリ確保関数malloc(https://ja.wikipedia.org/wiki/Malloc)の仲間であるreallocを使ってメモリ領域の伸張をしていきます。reallocですから、メモリの確保に失敗することも、メモリ領域が移動していることもあります。//reallocの返値をifで確認してメモリ確保失敗なら(elseの左側)gotoで脱出メモリ確保成功なら(elseの右側)確保できたので新領域へ書き換える。正しいとなっているのは意図的です。}}gotoは嫌われ者だけど、実際こんなの見たくないからね。メモリ領域が移動する問題そもそもこの関数の外に読み込み途中のポインタを持ち出していないので問題なし。EXIT_FAILURE;}成功したら、呼び出し元へ内容を入れたポインタを返却する。失敗したらreallocで確保したメモリを解放して、呼び出し元のポインタは触らない。読み込み処理1回毎の処理はこの関数。){}テクニカル指標を計算する長いので端折ります。失敗即脱出とTA-Libの計算関数呼び出しを組み合わせている。関数の呼出を区切りにスクリプトでcsplitでCSVファイルを分割している。絶対速度勝負ならとにかく、普通はPythonでええねんな。「C/C++に死を」ですすめられているのでRust言語で同じ物を書き直しました。C,Haskellの知識で書いているのでRust言語はチョットよくわからないが、C言語版,Rust言語版共に同じ入力に対して同じ出力が得られているのでこれで良しとする。CargoのプロジェクトはここにTA-LibのRustラッパーはこれを採用しました以下のプログラムはこの環境で動くことを確認しています。}}Rust言語は今回始めて使うのでチョットよくワカラナイ。おわりにC言語ソースをRust言語に移植しただけだから見比べてみてほしい(TA-libラッパーが薄いのでそのままですやん)。あとC言語のエグさを知っているとRust言語はとてもイイ。