0

ポインターがあり、逆参照するとエラーが発生します。問題は、パラメーター *ns__personRequestResponse

int __ns3__PersonRequest(soap *, _ns1__PersonRequest *ns1__PersonRequest, _ns1__PersonRequestResponse *ns1__PersonRequestResponse)
{
    ns1__PersonRequestResponse->result = 0;
    //ns1__PersonRequestResponse = new _ns1__PersonRequestResponse();
    *ns1__PersonRequestResponse->result = 39; // Error here
    return SOAP_OK;
}

以下は、応答パラメーターを持つ wsdl から作成されたヘッダー ファイルの一部です。

class _ns1__PersonRequestResponse
{ 
  public:
     /// Element result of type xs:int.
     int*                                 result                         0; ///< Nullable pointer.
     /// A handle to the soap struct that manages this instance (automatically set)
     struct soap                         *soap                          ;
};

整数変数の結果に値を代入すると、セグメンテーション違反が発生します。どうすればそれを機能させることができますか?

4

1 に答える 1

0

構造体の結果フィールドは へのポインタintです。コードでは、最初に に初期化してから0、そのポインターを介して値を割り当てようとします。しかし、ほとんどのシステムでは、アドレス 0 のメモリがプログラムに割り当てられていないため、これは失敗します。

修正は、resultそのポインタを介して割り当てを試みる前に、有効なメモリを指していることを確認することです。それがどのように行われるかは、その構造がコードでどのように使用されるかによって異なります。1 つの方法は、関数の外部 (おそらくファイル スコープ) で変数を宣言し、intそのアドレスを取得してに割り当てることresultです。

int my_result;  // This should be declared OUTSIDE of a function!

int __ns3__PersonRequest(soap *, _ns1__PersonRequest *ns1__PersonRequest, _ns1__PersonRequestResponse *ns1__PersonRequestResponse)
{
    ns1__PersonRequestResponse->result = &my_result;  // Make sure pointer points to valid memory
    *ns1__PersonRequestResponse->result = 39; // Updates the value of my_result
    return SOAP_OK;
}
于 2013-06-26T16:59:50.070 に答える