gsoap 2.8.59中的填充结构

时间:2018-08-02 16:25:00

标签: c++ web-services gsoap

我正在编写一个C ++服务,该服务需要填充嵌套在结构中的结构作为对服务调用的响应。我已经能够使用gsoap 2.8.3做到这一点 没问题。在更新到2.8.59之后,出于某种原因(由于使用同一头文件生成gsoap代码,因此不是在头文件中使它们成为指针),内部结构内部的变量被保留为指针。

<dependency>
    <groupId>com.github.codemonstur</groupId>
    <artifactId>simplexml</artifactId>
    <version>1.5.4</version>
</dependency>

如果我不填充return结构,则函数调用可以正常工作。程序因以下异常而崩溃:

int Example::myFunction(_ns2__incomingNestedStruct *ns2__incomingNestedStruct,
                           ns2__nestedStructResponse &ns2__nestedStructReturn_)
   {
       // gsoap 2.8.3, works fine
       ns2__nestedStructReturn_.NameOfInnerStruct.variableOneName = 3;

       // gsoap 2.8.59, causes the program to crash
       int testVar = 3;
       ns2__nestedStructReturn_.NameOfInnerStruct->variableOneName = &testVar; 

   }

我尝试将 Unhandled exception at 0x000000013F9A230B in programName.exe: 0xC0000005: Access violation writing location 0x0000000000000008. 设置为成员变量,但这也不起作用。如何填充内部结构而不会崩溃?有没有一种方法可以使gsoap 2.8.59不使用指针来保存成员变量?

2 个答案:

答案 0 :(得分:0)

尝试将int testVar设置为全局变量,我的意思是在函数外部声明它,并在函数内部分配值3。

答案 1 :(得分:0)

事实证明内部结构也被保留为指针。在动态分配变量之后,还必须动态分配变量(按此顺序)。指针也可以设置为成员变量的地址。