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在尝试通过该指针分配之前指向有效内存。究竟应该如何发生取决于该结构将如何在您的代码中使用。一种方法是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 回答