分段故障soap
Segmentation fault soap
我正在做一个简单的soap应用程序。我有两个功能,一个在服务器上,另一个在客户端上。然而,我一直在客户身上遇到细分错误。我做错了什么?
这是客户端
#include "soapTempConvertSoapProxy.h"
#include "soapTempConvertSoapService.h"
#include "TempConvertSoap.nsmap"
#include <iostream>
using namespace std;
#include <string>
#include <sstream>
std::string s = std::string();
const char server[] = "http://localhost:8000";
int main(int argc, char **argv)
{
TempConvertSoapProxy temp;
//mudar endpoint se necessario
temp.soap_endpoint = server;
_ns1__FahrenheitToCelsius *ns1__FahrenheitToCelsius;
_ns1__FahrenheitToCelsiusResponse *ns1__FahrenheitToCelsiusResponse;
_ns1__CelsiusToFahrenheit *ns1__CelsiusToFahrenheit;
_ns1__CelsiusToFahrenheitResponse *ns1__CelsiusToFahrenheitResponse;
int ope = 1;
while(ope)
{
std::cout << "Por favor entre com o codigo da operacao:" << 'n';
std::cout << "1 = Fahrenheit para Celsius, 2 = Celsius para Fahrenheit, 0 = terminar" << 'n';
std::cin >> ope;
std::cout << "Por favor entre com a temperatura" << 'n';
if(ope == 1 || ope == 3)
{
std::cin >> s;
ns1__FahrenheitToCelsius->Fahrenheit = &s;
}
else
{
if(ope == 2 || ope == 4)
{
std::cin >> s;
ns1__CelsiusToFahrenheit->Celsius = &s;
}
}
switch(ope)
{
case 0: break;
case 1: if(temp.FahrenheitToCelsius(ns1__FahrenheitToCelsius, ns1__FahrenheitToCelsiusResponse) == SOAP_OK)
{
std::string z = *(ns1__FahrenheitToCelsiusResponse->FahrenheitToCelsiusResult);
std::cout << z << 'n';
}
else
{
temp.soap_stream_fault(std::cerr);
}
break;
case 2: if(temp.CelsiusToFahrenheit(ns1__CelsiusToFahrenheit, ns1__CelsiusToFahrenheitResponse) == SOAP_OK)
{
std::string z = ns1__FahrenheitToCelsiusResponse->FahrenheitToCelsiusResult->c_str();
std::cout << z << 'n';
}
else
{
temp.soap_stream_fault(std::cerr);
}
break;
case 3: if(temp.FahrenheitToCelsius_(ns1__FahrenheitToCelsius, ns1__FahrenheitToCelsiusResponse) == SOAP_OK)
{
std::string z = ns1__FahrenheitToCelsiusResponse->FahrenheitToCelsiusResult->c_str();
std::cout << z << 'n';
}
else
{
temp.soap_stream_fault(std::cerr);
}
break;
case 4: if(temp.CelsiusToFahrenheit_(ns1__CelsiusToFahrenheit, ns1__CelsiusToFahrenheitResponse) == SOAP_OK)
{
std::string z = ns1__FahrenheitToCelsiusResponse->FahrenheitToCelsiusResult->c_str();
std::cout << z << 'n';
}
else
{
temp.soap_stream_fault(std::cerr);
}
break;
default: std::cout << "Erro! Codigo de operação desconhecido!" << 'n' << "Por favor, tente novamente!" << 'n';
break;
}
}
return 0;
}
这是服务器
#include "soapTempConvertSoapService.h"
#include "TempConvertSoap.nsmap"
#include <iostream>
#include <stdlib.h>
using namespace std;
#include <string>
#include <sstream>
#include <utility>
std::string s = std::string();
std::string str = std::string();
int demp;
int main(int argc, char **argv)
{
TempConvertSoapService temp;
if (argc < 2)
{
temp.serve(); /* serve as CGI application */
}
else
{
int port = atoi(argv[1]);
if (!port)
{
fprintf(stderr, "Usage: tempserver++ <port>n");
exit(0);
}
/* run iterative server on port until fatal error */
if (temp.run(port))
{
temp.soap_stream_fault(std::cerr);
exit(-1);
}
}
return 0;
}
int TempConvertSoapService::FahrenheitToCelsius(_ns1__FahrenheitToCelsius *ns1__FahrenheitToCelsius, _ns1__FahrenheitToCelsiusResponse *ns1__FahrenheitToCelsiusResponse)
{
str = (*ns1__FahrenheitToCelsius->Fahrenheit);
istringstream convert(str);
stringstream konvert;
if ( !(convert >> demp) )
{
demp = 0;
}
else
{
demp = (demp - 32) * 5/9;
konvert << demp;
s = konvert.str();
ns1__FahrenheitToCelsiusResponse->FahrenheitToCelsiusResult = &s;
}
return SOAP_OK;
}
int TempConvertSoapService::CelsiusToFahrenheit(_ns1__CelsiusToFahrenheit *ns1__CelsiusToFahrenheit, _ns1__CelsiusToFahrenheitResponse *ns1__CelsiusToFahrenheitResponse)
{
str = (*ns1__CelsiusToFahrenheit->Celsius);
istringstream convert(str);
stringstream konvert;
demp;
if ( !(convert >> demp) )
{
demp = 0;
}
else
{
demp = demp * 9/5 + 32;
konvert << demp;
s = konvert.str();
ns1__CelsiusToFahrenheitResponse->CelsiusToFahrenheitResult = &s;
}
return SOAP_OK;
}
int TempConvertSoapService::FahrenheitToCelsius_(_ns1__FahrenheitToCelsius *ns1__FahrenheitToCelsius, _ns1__FahrenheitToCelsiusResponse *ns1__FahrenheitToCelsiusResponse)
{
str = (*ns1__FahrenheitToCelsius->Fahrenheit);
istringstream convert(str);
stringstream konvert;
demp;
if ( !(convert >> demp) )
{
demp = 0;
}
else
{
demp = (demp - 32) * 5/9;
konvert << demp;
s = konvert.str();
ns1__FahrenheitToCelsiusResponse->FahrenheitToCelsiusResult = &s;
}
return SOAP_OK;
}
int TempConvertSoapService::CelsiusToFahrenheit_(_ns1__CelsiusToFahrenheit *ns1__CelsiusToFahrenheit, _ns1__CelsiusToFahrenheitResponse *ns1__CelsiusToFahrenheitResponse)
{
str = (*ns1__CelsiusToFahrenheit->Celsius);
istringstream convert(str);
stringstream konvert;
demp;
if ( !(convert >> demp) )
{
demp = 0;
}
else
{
demp = demp * 9/5 + 32;
konvert << demp;
s = konvert.str();
ns1__CelsiusToFahrenheitResponse->CelsiusToFahrenheitResult = &s;
}
return SOAP_OK;
}
谢谢!
您从不初始化_ns1__FahrenheitToCelsius *ns1__FahrenheitToCelsius
和类似的变量,而是尝试访问它们的数据成员(例如ns1__FahrenheitToCelsius->Fahrenheit = &s;
)。看起来这些可能只是对象本身,而不是指针。
相关文章:
- 分段故障(堆芯转储)矢量
- C++中的动态铸造故障
- 数组的指针从不分段故障
- vscode g++链路故障:体系结构x86_64的未定义符号
- 访问被拒绝后,c++中的故障保护代码
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- 调试 CUDA MMU 故障
- Geeksforgeeks C 程序故障排除:IEE 754 表示法为十进制
- C# DLL 从C++应用程序调用 SOAP Web 服务
- Arch Linux.AUR 包 mysql 不能用 makepkg 构建.错误:构建 () 中出现故障
- 正在处理故障(堆芯转储)
- 在 Boost::fiber 中引发的BOOST_ASSERT故障 Visual Studio "Debug" 构建
- 如何进行故障排除:未定义对"非虚拟 thunk to ..."的引用
- C++函数过载会导致 SEG 故障
- 分段故障 运行C++代码时出现 SIGSEGV
- 当新的故障时,是否有必要留出一些紧急内存?
- Python & C-C++ 扩展模块案例段故障
- 带升压的 SEG 故障::make_shared / 特征3 内存.h.
- 分段故障soap