0

重複の可能性:
なぜこの C コードは機能するのですか?

構造体のフィールドのオフセットを見つけるためのこのコードが segfault を与えないのはなぜですか?

#define offset(structName,fieldName) (&((structName *)0)->fieldName)
4

1 に答える 1

3

データにアクセスしていないためです。アドレスを計算しているだけです。次のいずれかの操作を試してください。

foo = *offset(MyStruct, MyField);
*offset(MyStruct, MyField) = 1234;

そして、美しい SEGFAULT が表示されます :-)

于 2012-08-06T09:26:25.757 に答える