我正在编写一个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不使用指针来保存成员变量?
答案 0 :(得分:0)
尝试将int testVar设置为全局变量,我的意思是在函数外部声明它,并在函数内部分配值3。
答案 1 :(得分:0)
事实证明内部结构也被保留为指针。在动态分配变量之后,还必须动态分配变量(按此顺序)。指针也可以设置为成员变量的地址。