分段错误,访问自定义的 gsoap 标头
Segmentation Fault while accessing custom defined gsoap header
我们试图在gsoap结构中包含自定义的标头。下面是我们的标头定义:
typedef struct apollo__Header
{
char *UserName;
int VenueId;
time_t TransactionTime;
};
struct SOAP_ENV__Header
{
struct apollo__Header *apollo__Header 0; /* mustUnderstand */
};
我们使用 soapcpp2 编译器生成了 envStub 和其他标头/代码,其中包含以下命令:
$(SOAPCPP2) -z1 -d env -p env $(GSOAP_HEADERS) env_soap.h
$(SOAPCPP2) -z1 -n -t -d gsoap $(GSOAP_HEADERS) apollo_soap.h
在客户端代码中,我们初始化了这个标头,如下所示:
void
prepareSoapHeader(soap* soap, const rString username)
{
//pProperties props = AppProps::getProperties();
apollo__Header *header = (apollo__Header*)malloc(sizeof(apollo__Header));
header->UserName = new char[username.length() + 1];
strcpy(header->UserName, username.toCString());
header->VenueId = 110;
header->TransactionTime = 0;
soap->header = (SOAP_ENV__Header*)malloc(sizeof(SOAP_ENV__Header));
soap->header->apollo__Header = header;
}
现在,当我们在服务器上调用 Web 服务时,我们在访问此标头时在服务器上出现分段错误!执行以下代码时,服务器在此处崩溃:
int apollo__getAvailableTestIDs(soap* soap, apollo__vAvailableTestIDs &resp)
{
apollo__Header *header = getSoapHeader(soap);
if(header != NULL){
AccessLogger l(soap->peer,"getAvailableTestIDs", "", header->UserName);
}
else{
AccessLogger l(soap->peer,"getAvailableTestIDs", "", "UNKNOWN_USER");
}
调试显示:
(gdb) p *soap->header->apollo__Header->UserName
Cannot access memory at address 0xc0de000001da1230
(gdb) p *soap->header->apollo__Header
Cannot access memory at address 0xc0de000001da1230
我们试图找出根本原因,发现 Header 通过在客户端代码中打印其值来正确初始化。但是 tcpdump 显示客户端没有向服务器发送标头值,例如 .
这似乎是一些配置错误。可以帮助指出这里出了什么问题。任何帮助将不胜感激。
谢谢。
如果有多个 .c 文件,并且是重新编译,请确保您拥有所有具有最新结构更改的目标文件。
相关文章:
- g++ 说函数不存在,即使包含正确的标头
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 在CMake中使用find_package时,是否会显式包含标头
- 错误"Could not find Boost"(缺少:上下文标头)
- 如何在标头中声明(或定义)函数的问题
- 如何避免在仅标头库中C++类/变量重定义
- C++算法标头中,为什么要使用 "!(val < *first)" ?
- C++标头错误 C2238 意外标记";"
- std::initializer_list,大括号初始化和标头
- 在 c++ 中拆分类和标头中的继承,错误
- 如何确定哪个标头调用 c++ 中的另一个标头
- 如何在生成文件中添加多个标头 (HDR) 和对象?
- 我可以在运行时重新定义在 OpenCascade/OCCT 标头中定义的 c++ 静态常量吗?
- GCC,CMake,预编译标头和维护依赖项
- 如何从客户端在 gsoap C++ 的标头中传递非 xml 数据?
- 为没有 WSDL 的 Gsoap 创建一个标头
- gSOAP - 未设置 SOAP 操作标头
- 定义从标头生成 gSOAP 文件时无法识别
- gSOAP - 修改 HTTP POST 标头
- 分段错误,访问自定义的 gsoap 标头