0

次のような引数として言及されたサイズを受け入れる関数があります。

 sizeof(tcpstuct) * tcprules

まあ言ってみれば

tcpstuct は、タイプ INT32 メンバーを持つ構造体です。( INT32 は int 型であり、プラットフォーム依存性のために INT32 として定義されています)

tcprules は NAT32 型の変数です。

関数が別の型を受け入れる場合は、 WORD32 と言います。キャストはどうすればいいですか?

私が試したこと:

(WORD32 ) (sizeof(tcpstuct) * (INT32 )tcprules )
(WORD32 ) ((INT32 )(sizeof(tcpstuct) * (INT32 )tcprules ))

しかし、これらは両方とも seg fault をスローします! をキャストする必要がありsizeofますか?

編集:すべてが指摘したように、セグ障害は他の場所のバグが原因でしたgdbに感謝します

4

2 に答える 2

1

sizeof(tcpstuct)が1つの「もの」のサイズであり、が「もの」の数である場合tcprules、キャストは必要ありません。

C異なる整数型間で自動的に変換されるため、式の型が何であれ、sizeof(tcpstuct) * tcprules変換する必要がありますWORD32(それが何であれ、整数型であると想定します)。

コードのバグが他の場所にある可能性があり、この式が投稿したバージョンのいずれかでセグメンテーション違反を引き起こす可能性はほとんどありません。たぶん、セグメンテーション違反はあなたが呼び出す関数にあります。

于 2012-09-06T11:03:51.720 に答える
1

あなたのステートメントに潜在的なクラッシュは見られません。segfault は別の場所にあるはずです。

于 2012-09-06T12:13:56.033 に答える