以下の関数は、構造体へのポインターの配列へのポインターを取り、API_AddParType
各配列要素のフィールドの一部をリストします。次のように各要素にアクセスすると、すべてが期待どおりに機能し(*ppParams)[ii]
ます。
void ParamsListWrapper::ListParams2(API_AddParType** ppParams)
{
unsigned long ii, nParams;
nParams = BMGetHandleSize( (GSHandle)ppParams ) / sizeof(API_AddParType);
// list params
for ( ii = 0; ii < nParams; ii++ ) {
WriteReport( "Param name = \"%s\", double = %f", (*ppParams)[ii].name, (*ppParams)[ii].value.real );
}
}
さて、次のような参照変数を使用しましょうAPI_AddParType& param
。
void ParamsListWrapper::ListParams1(API_AddParType** ppParams)
{
unsigned long ii, nParams;
nParams = BMGetHandleSize( (GSHandle)ppParams ) / sizeof(API_AddParType);
// list params
for ( ii = 0; ii < nParams; ii++ ) {
API_AddParType& param = (*ppParams)[ii];
WriteReport( "Param name = \"%s\", double = %f", param.name, param.value.real );
}
}
へのポインターを使用して同じコードを試してみますAPI_AddParType
。
void ParamsListWrapper::ListParams3(API_AddParType** ppParams)
{
unsigned long ii, nParams;
nParams = BMGetHandleSize( (GSHandle)ppParams ) / sizeof(API_AddParType);
// list params
for ( ii = 0; ii < nParams; ii++ ) {
API_AddParType* pParam = ppParams[ii];
if (pParam != NULL) {
WriteReport( "Param name = \"%s\", double = %f", pParam->name, pParam->value.real );
} else {
WriteReport( "Param is NULL" );
}
}
}
セグメンテーション違反が発生しました。どうしてですか?参照は問題なく機能するのに、ポインタでデータにアクセスすると失敗するのはなぜですか?