問題タブ [flexible-array-member]

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.

0 投票する
2 に答える
3896 参照

c - 次の警告が表示されます: The ABI of pass struct with an flexible array member has changed in GCC 4.4

プログラムを実行しようとすると、この警告といくつかの奇妙なバグが発生します。 rmi_pdu次の構造には、アクセスしたい可変サイズの配列が含まれています。

問題は、動的に割り当てているメモリを解放しようとしているときです。内容はありますが、free()API はabort()ing です。コアはこんな感じ

振り分けはこんな感じ。rmi を使用したい呼び出し元は、引数としてサイズを渡します。

len引数として渡されます。

0 投票する
1 に答える
187 参照

c - 柔軟な配列メンバーを使用した奇妙な動作

より受け入れられているイディオムを使用して、構造体のvoid*メンバーを柔軟な配列メンバーに置き換えようとしました。

次に、エントリを連続メモリブロックに追加します。

そのような:

問題は、必要に応じてこのデータを解凍することです。たとえば、私がそうする場合:

これが考えられる理由はありますか?私は必ずしもどこかで何かを踏みつけているとは思いません、そしてそれはvoid*アプローチで働いていました。奇妙なことに、ダミーのvoid *を構造体に戻すと、機能します。ダミーintを入れても動作しません。

number編集:実際には、 inが0でない場合も失敗します。もしあれば、AddEntry私は何を踏んでいますか?

0 投票する
2 に答える
1986 参照

c - フレキシブル配列メンバー (ゼロ長配列)

GCCのZero Length Arrayの説明を参照してください:

これは、構造体が可変長オブジェクトのヘッダーである場合に特に役立ちます。これはまさに私の場合です。さらに、ヒープ内の構造体の配置にも関心があります。

この場合、長さゼロの配列の何が便利なのか、まだよくわかりません。彼らはこの特定の状況にどのように関連していますか?

編集:

そこに好きなだけ「データ」を入れることができるということですか?

0 投票する
1 に答える
1006 参照

c - 別の構造体に柔軟な配列メンバーを持つ構造体

以下のコードのようなものは有効ですか?

私には問題ないように思えますが、私がそうしてもコンパイラは文句を言わないので、私は少し懐疑的です:

0 投票する
3 に答える
325 参照

c++ - 長さゼロの配列メンバーを持つ「完全な」C++ クラスを作成することは可能ですか?

単純な古い Cを使用する場合、次のように実装されるデータ型があります

私がやりたいのは、基本的にそれをクラスにして、 lessequalitycopy constructoroperator assignmentなどの通常の演算子を追加することです。ご想像のとおり、 std::mapなどの連想コンテナーでそのようなクラスをkeyとして使用します。

バッファは理想的にはオブジェクト自体と同じレベルにある必要があります。そうしないと、2 つのバッファ (バッファ) を比較する必要があるときに、CPU がポインタを取得してメモリにロードする必要があります。割り当てられたメモリが残りのデータメンバーと連続していないため、std::vectorを使用したくありません。

私にとっての主な問題は、バッファのサイズが適切なメモリサイズを割り当てる関数がCにあるという事実です。C++ では、そのようなことはできません。

私は正しいですか?乾杯

0 投票する
2 に答える
2983 参照

c - 柔軟な配列メンバーを持つ構造体の割り当て

これは C99 コードです:

さて、どのようにメモリを割り当てますか?

また

?

柔軟な配列メンバーを持つ型で動作することがsizeof保証されていますか (GCC はそれを受け入れます) ?

0 投票する
5 に答える
10432 参照

c - 要素がゼロの配列の必要性は何ですか?

Linuxカーネルコードで、理解できない次のことがわかりました。

コードはこちら: http://lxr.free-electrons.com/source/include/linux/ti_wilink_st.h

要素がゼロのデータ配列の必要性と目的は何ですか?

0 投票する
2 に答える
337 参照

c++ - c++構造体の実行時サイズの配列

C(gccを使用)では、いくつかの追加情報を含む配列であるデータ構造がいくつかありました。

Iirc、これは「柔軟な配列」と呼ばれます(http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html#Zero-Lengthmalloc(sizeof(song)+N*sizeof(note)) )次に、実行時にN音の曲を割り当てることができます。今回ベクターを使用するつもりがない場合、または役に立たないnote*ポインターを導入するつもりがない場合、それはg ++でどの程度サポートされsongますか?

0 投票する
2 に答える
2284 参照

c - 柔軟な配列メンバーは本当に必要ですか?

柔軟な配列メンバーを持つ構造体は、明らかに宣言することを意図したものではなく、その構造体へのポインターと組み合わせて使用​​ することを意図しています。柔軟な配列メンバーを宣言するときは、少なくとも 1 つの他のメンバーが必要であり、柔軟な配列メンバーはその構造体の最後のメンバーでなければなりません。

次のようなものがあるとしましょう:

それを使用するには、ポインタを宣言し、malloc を使用して構造体の内容用にメモリを予約する必要があります。

つまり、flm[] 配列に 5 つの整数を保持させたい場合です。次に、次のように構造体を使用できます。

私の質問は、これの代わりにポインターを使用できるべきではないですか? C99 以前と互換性があるだけでなく、その構造体へのポインターの有無にかかわらず使用できます。私はすでに flm で malloc を使用しなければならないことを考えると、これを行うだけでよいのではないでしょうか?

example struct のこの新しい定義を考えてみましょう。

柔軟な配列メンバーと同じ方法で置換を使用することもできます。

これも機能しますか?(notflm を使用した例の上記の定義を提供)