指针段错误问题

时间:2011-03-18 08:30:20

标签: c++ pointers segmentation-fault

指针段错误问题......

我一直在做c ++几个星期,但我再次遇到了这个问题。

基本上我已经给出了这些课程。我不能改变它们。我从_ns3__importAuftragResponse kout;

的实例开始
class SOAP_CMAC _ns3__importAuftragResponse
{
public:
        ns2__SOAPImportResult *return_;
         ...




class SOAP_CMAC ns2__SOAPImportResult
{
public:
        bool *error;   
        int *numberOfIgnoreds; 
        ....

我的代码需要检查numberOfIgnoreds

第一种方法

ns2__SOAPImportResult* imp_result;
imp_result = kout.return_;

int num;
num = *imp_result->numberOfIgnoreds;

或我使用

ns2__SOAPImportResult imp_result;
imp_result = *(kout.return_);
int* num;
*num = *imp_result.numberOfIgnoreds;

我主要得到分段错误 我一般都知道在运行时会发生什么,但不能提出正确的颂歌。请帮助。

修改

通过Nawaz的答案取得了进展,但仍需要一些理解

ns2__SOAPImportResult * imp_ptr = new ns2__SOAPImportResult;
imp_ptr = kout.return_;
int * num = new (int);
// next line segfaults
*num = *imp_ptr->numberOfIgnoreds;

我难以理解的是,如何或为什么为已经“存在”的东西分配内存,因为对象kout的成员return_

所以说我需要为我赋予它的变量分配内存(当然是同一类型)是正确的吗?

2 个答案:

答案 0 :(得分:2)

很可能您没有为您在引用的代码中使用的以下成员分配内存。

ns2__SOAPImportResult *return_; //in the class _ns3__importAuftragResponse 


int *numberOfIgnoreds;  //in the class  ns2__SOAPImportResult

除此之外,我没有看到任何可能出错的地方!

确保为这些成员(以及程序中的所有其他指针)分配内存,然后再使用。您可以使用new来分配内存。或者,您也可以使用malloc()。无论您使用什么,一直使用它,并在完成后取消分配内存,分别使用deletefree()

答案 1 :(得分:1)

这看起来像gsoap。在这种情况下,您必须使用soap_malloc来分配您返回的内存。

例如,在FAQ页面上,您会找到以下示例:

int ns__itoa(struct soap *soap, int i, char **a)
{ *a = (char*)soap_malloc(soap, 11);
  sprintf(*a, "%d", i);
  return SOAP_OK;
}