問題タブ [static-memory-allocation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Cの既知の位置にあるポインタで配列を通過することは可能ですか?
私の質問には説明が必要です:
まず、サイズ n (動的または静的) の 1D 配列を考えてみましょう。タブとしましょう。
配列がアドレス 0x01 から (0x01 + n - 1) までのメモリに格納されていると仮定して簡単に説明します。
ここで、p というポインターを考えてみましょう。開始インデックス i (0 から n - 1 の間)。
次に、それを行います:
p はアドレス 0x0i の値を知っています。(表記は正しくありませんが、要点はわかります)。
このように p を使用してtab[i - 1]またはtab[i + 1]を読み取ることができますか?
それとも単にこのように?
そして最終的にこれを行うのですか?
それが1D配列で可能であれば、多次元配列でも可能ですか? そして、Cでそれを実装する方法は?
c - C は、最初に割り当てられた配列から静的メモリを参照します
動的メモリを使用しないというソフトウェア要件があります。その上で、k_dimensions、k=1 (通常の配列のように)、k=2 (2 次元) などで kd-tree を作成しようとしています。
私の kd_tree.h ヘッダーには、ツリー (スニペット) の表現があります。
私の kd_tree.c 実装では、新しいノードの配列に事前に割り当てられた静的メモリを割り当て/参照しようとしています (スニペット):
私は今クラッシュしています。これは data_points 配列のアドレスを参照する正しい方法 root->info = &data_points_space[current_number_of_data_points+i];
ですか?
ありがとう
c - 関数でストレージを使用する場合の malloc と char array[i] の使用の違い
array[size]
実行前に定義された長さの配列 (コマンド ライン引数に依存) を で定義する場合と使用して定義する場合の違いは何malloc()
ですか? array[i]
スタックに置かれたデータにつながりmalloc()
、ヒープを使用します[このスタックオーバーフローを参照してください]
そのため、大きなデータではスタックオーバーフローが発生する可能性がありますが、新しいマシンでは合計 30char
秒int
で問題はありません (これによると、Windows のスタックは約 1MBです)。
したがって、おそらく明らかな何かが欠けています。
私が理解している限り、で定義されているmain()
場合、2つは同じである必要があります。
例 1
例 2
しかし、関数内で配列を使用し、それをポインター ( func(char* array)
) または配列 ( funct(char array[])
) として渡すと、gdb-debugger は、関数が #1 で壊れたデータを渡されたことを知らせてくれますmalloc()
。
はarray[i]
、コンパイル時に決定されない場合に使用しても問題ありませんか? それはスコーピングの問題ですか?この回答にはそのようなことを示唆するコメントがありますが、それがここに当てはまるかどうかはよくわかりません。
C99を使用しています。