0

構造体のメンバーにアドレス参照を設定しているときに問題が発生しましたが、メンバーを使用して実行すると、それ自体で問題ありません。

構造部材付き

memcpy(&(AVPFieldStructureObj->resource_value),data_start,actual_data_length);

メモリアドレス付き

memcpy((&AVPFieldStructureObj+fieldOffset),data_start,actual_data_length);

ここで、actual_data_lengthは変数のサイズであり、data_startはデータバッファーを指すポインターです。

メモリを使用すると、フィールドを印刷したときにガベージ値が返され、全体を実行した後、セグメンテーション違反が発生しますが、GDBでデバッグすると、プログラムは正常に終了しました。セグメンテーション違反はありませんでした。

提案してください

前もって感謝します

よろしく、Soheb

4

1 に答える 1

0

fieldOffsetオフセットはバイト単位だと思いますか?

次のようなことをしている場合:

Type* pointer = somewhere;
pointer += 3;

次に、バイト単位pointerで前方に移動します。つまり、3つのオブジェクトが前方に移動します。3*sizeof(Type)Type

したがって、コードでは、後者のバリアントでは、アドレスをfieldOffsetバイト単位でオフセットするのではなく、バイト単位でオフセットしfieldOffset*sizeof(AVPFieldStructureObj)ます。

char*一時的にへのポインタにキャストすることで、これを回避できます。

于 2010-11-27T14:04:36.597 に答える