Speicherzugriffsfehler



  • Hi alle,

    habe ein kleines Problem mit einem Speicherzugriffsfehler: Hab einen kleinen, simplen Connect-Portscanner gebaut. Er erwartet als Eingabe genau 3 Argumente. Die Anzahl der Argumente wird anfangs überprüft. Ist sie richtig, funktioniert das Ding auch ganz gut. Wenn jedoch die Anzahl nicht stimmt, kommt ein Speicherzugriffsfehler.

    Hier der Code:

    http://nopaste.php-quake.net/4040

    P.S.: Hab den Code per Hand abgeschrieben, könnte sein, dass hier und da ein Typo ist.

    Bye



  • Hallo,

    Was soll den das bewirken?

    s_port = atoi(argv[2]); //ich denke durch diesen befehl atio() kommt der fehler zu stande
     s_port = atoi(argv[3]);
    

    Und, es handelt sich hierbei nicht um Befehle, sondern um Funktionen. Wenn du ausserdem schon hier einen Tippfehler gemacht hast (atio), dann schlage ich vor, dass du deine Source mit der Source (wovon du abgeschrieben hast) nochmals vergleichst.

    tschüsserle



  • ripley23 schrieb:

    Wenn jedoch die Anzahl nicht stimmt, kommt ein Speicherzugriffsfehler.

    Wundert Dich das? Du greifst dann auch auf ein nicht vorhandenes Element zu. Um das zu prüfen wird argc mitgeliefert.



  • Hallo Susi,

    und da ist schon der erste Tippfehler. Der code soll lauten:

    s_port = atoi(argv[2]); //ich denke durch diesen befehl atio() kommt der fehler zu stande
     e_port = atoi(argv[3]);
    

    Es soll das 2 & 3 argument also start- und endport eingelesen und mittels atoi() zu integer-werten umgewandelt werden.

    Wundert Dich das? Du greifst dann auch auf ein nicht vorhandenes Element zu. Dafür wird argc mitgeliefert.

    Mein code, sollte dies eigentlich abfangen und das programm beenden.

    Übrigens:

    Auch wenn ich Hostnamen anstatt IPs übergebe, kommt ein Speicherzugriffsfehler.



  • ripley23 schrieb:

    Mein code, sollte dies eigentlich abfangen und das programm beenden.

    Leider befindet sich die Prüfung unter dem Zugriff, so dass das Kind schon in den Brunnen gefallen ist wenn er merkt, dass Du zuwenig Argumente übergeben hast.

    Auch wenn ich Hostnamen anstatt IPs übergebe, kommt ein Speicherzugriffsfehler.

    Das könnte widerum daran liegen, dass Du host_ip, welches Du zuvor erfolgreich auf 0 (INADDR_NONE ist 0) verifiziert hast, als char-Pointer an gethostbyname übergibst. Der Hostname steht aber natürlich immernoch in argv[1] drin.



  • Ah,

    ziemlich banale Fehler.

    Also sollte die Zeile bei der Namensauflösung richtig heißen:

    host_ip = gethostbyname(argv[1]);
    

    und weiter unten müsste ich ja noch abändern:

    [code]
    memcpy((char *)&host.sin_addr, &host_ip, sizeof(host_ip));
    [code]

    Ich probier mal.

    Danke, sollte wohl noch nen kaffe trinken bevor ich weiter mache


Anmelden zum Antworten