[C++] Segmentation fault (core dumped)



  • Ich find einfach den verdammten fehler nicht ....

    #include <iostream>      // sollte klar sein ^^
    #include <fstream>       // filestream
    #include <stdexcept>     // runtime_error
    #include <sstream>       // stringstream
    #include <sys/socket.h>  // socket(), connect()
    #include <arpa/inet.h>   // sockaddr_in
    #include <netdb.h>       // gethostbyname(), hostent
    #include <errno.h>   	 // errno
    
    using namespace std;
    #define SERVER "md5.rednoize.com"
    #define MY_MAX 512
    
    void Getline(int socket, std::stringstream& line)
    {
    for(char c; recv(socket, &c, 1, 0) > 0; line << c)
        {
            if(c == '\n')
            {
                return;
            }
        }
    
    }
    
    void sendall(int socket, const char* const buf , const int size)
    {
    int bytesSent = 0;
      do
      {
      	int result = send(socket,buf + bytesSent,size-bytesSent ,0);
            cout << "----debugg " << result << endl;
    	if(result <0)
            {
            cout << "error\n";
            }
    	bytesSent += result;
      }while(bytesSent<size);  
    }
    
    int main(int argc,char** argv)
    {
        //if(argc<2){cout << " Usage: "<< argv[0] << "<md5 hash>\n Example: test.exe a58e7057ce63430500ee8ba74f291893 \n";exit(1);} 
    
    int sock=socket(AF_INET,SOCK_STREAM,0);
    if(sock == 0);
    	cout << "[*]Socket erstellt\n";
    
    char unsigned md5hash = 'a58e7057ce63430500ee8ba74f291893';
    struct hostent *host; 
    struct sockaddr_in addr;
    
    host = gethostbyname(SERVER);
    
    memset(&addr,0,sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port   = htons(80);
    addr.sin_addr   = *((in_addr *)host->h_addr);
    
    if(connect(sock,(sockaddr*)&addr,sizeof(addr)) == 0);
    	cout << "[*]Connected\n";
    
    string request = "GET ";
    request += "/?s=";
    request += md5hash;
    request += "HTTP/1.1\r\nHost: ";
    request += SERVER ;
    request += "\r\nConnection: close\r\n\r\n";
    
    cout << "----debugg "<< request << endl;
    
    cout << "[~]Send GET\n";
    sendall(sock,request.c_str(),request.size());
    cout << "[*]Send GET\n";
    cout << "[~]Schreibe in Output.html\n";
    
    ofstream fout("Output.html");
    while(true)
    {
    	stringstream line;
    	Getline(sock,line);
    	fout << line.str() << endl;
    }
    
    cout << "[*]Alle Daten in Datei geschrieben\n";
    
    fout.close();
    close(sock);
    cout << "[*]Socket geschlossen\n";
    }
    


  • Dann bitte einen genaueren Fehlerbeschreib. Mit Meldung, die du bekommst, und vor allem genau an welcher Stelle.

    Hast du auch schon mal mit dem Debugger geprüft?



  • Verwendest du Windows? Dann musst du wohl vor Verwendung der Sockets WSAStartup oder sowas aufrufen.



  • valgrind hilft auch bei solchen Problemen.



  • ich verwende linux ,
    es läßt sich komplimieren nur nach dem start gibt es mir einen Segmentation fault (core dumped) aus , mehr nicht ..



  • threadstarter123 schrieb:

    ich verwende linux ,
    es läßt sich komplimieren nur nach dem start gibt es mir einen Segmentation fault (core dumped) aus , mehr nicht ..

    Übliche Vorgehensweise:
    Genannte Programme nutzen, oder mal alles auskommentieren und dann Schrittweise einführen, bis der Fehler kommt. Dann hast du die Stelle.



  • gdb meinProgramm core

    fertig.



  • threadstarter123 schrieb:

    ich verwende linux ,
    es läßt sich komplimieren nur nach dem start gibt es mir einen Segmentation fault (core dumped) aus , mehr nicht ..

    Wenn du das ganze mit dem g++ übersetzt, läßt du dir dann auch alle Warnings ausgeben? Lass das ganze zur Not mal mit der Option "-Wall" laufen.


Anmelden zum Antworten