我有一个指针,当我取消引用它时,它会给我错误。问题是参数* 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 ;
};
当我为整数变量结果赋值时,我得到分段错误。我怎么能让它发挥作用?
答案 0 :(得分: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;
}