c++ - 访问自定义 gsoap header 时出现段错误

标签 c++ c soap gsoap

我们正在尝试在 gsoap 结构中包含自定义的 header 。 以下是我们的 header 定义:

typedef struct apollo__Header
{
   char *UserName;
   int VenueId;
   time_t TransactionTime;
};

struct SOAP_ENV__Header
{ 
   struct apollo__Header *apollo__Header 0; /* mustUnderstand */
};

我们使用soocpp2编译器使用以下命令生成了envStub和其他 header /代码:

$(SOAPCPP2) -z1 -d env -p env $(GSOAP_HEADERS) env_soap.h
$(SOAPCPP2) -z1 -n -t -d gsoap $(GSOAP_HEADERS) apollo_soap.h

在客户端代码中,我们已初始化此 header ,如下所示:

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 服务时,我们在访问此 header 时会在服务器上遇到段错误! 执行以下代码时服务器崩溃:

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 的值,可以正确初始化 Header。 然而 tcpdump 显示客户端没有向服务器发送 header 值,就像 。

这似乎是一些配置错误。任何人都可以帮助指出这里出了什么问题吗? 任何帮助将不胜感激。

谢谢。

最佳答案

如果有多个.c文件,并且是重新编译,请确保您拥有所有具有最新结构更改的目标文件。

关于c++ - 访问自定义 gsoap header 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22839191/

相关文章:

rest - 如果 Web Service Location 不断变化,可以使用哪种 Architecture

java - Sharepoint GetListItems 不返回任何行

c++ - cygwin1.dll 丢失 - 无法运行程序

c - 关于 pthread_kill() 行为

c# - C代码中的数组索引混淆

c - 如何从 C 函数中的三个输入创建多项式函数?

java - 无法生成有效的网页。引用

c++ - 从灵气中制作共享指针的 vector

c++ - 是否有可能以这样一种方式实现一个类,即可以像 POD 一样对其进行值初始化

c++ - 二叉树可视化 - 循环树? (QT)