C++ 分段错误soap

C++ 分段错误soap,c++,soap,C++,Soap,我正在做一个简单的肥皂应用。我有两个功能,一个在服务器上,另一个在客户机上。然而,我在客户机上不断遇到细分错误。我做错了什么 这是客户 #include "soapTempConvertSoapProxy.h" #include "soapTempConvertSoapService.h" #include "TempConvertSoap.nsmap" #include <iostream> using namespace std; #include <string>

我正在做一个简单的肥皂应用。我有两个功能,一个在服务器上,另一个在客户机上。然而,我在客户机上不断遇到细分错误。我做错了什么

这是客户

#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 uu FahrenheitToCelsius*ns1 uu FahrenheitToCelsius和类似变量,而是尝试访问它们的数据成员,例如ns1 u FahrenheitToCelsius->Fahrenheit=&s;。看起来这些可能只是对象本身,而不是指针。

您的ns1\uuu FahrenheitToCensius等变量没有初始化请在询问之前先使用frickin调试器!