EAccessViolation



  • Hallo,

    folgendes löst bei mir eine EAccessViolation aus:

    struct ICMPHeader {
    BYTE type;
    };

    ICMPHeader *a;

    a->type = 5: // Diese Zuweisung löst den Fehler aus

    Nur um Missverständnisse zu vermeiden, es lässt sich kompilieren, kein Fehler wird genannt. Aber in der Laufzeit crash es dann und wirft den Fehler aus.

    Leider komme ich selber bisher nicht drauf, daher pls help me 🙂



  • Du musst ja auch an a erstmal eine ICMPHeader- Struktur zuweisen, so zeigt der sonstwo hin, weil der überhaupt nicht initialisiert ist.



  • wie könnte so eine Zuweiseung aussehen?



  • Warum überhaupt ein Zeiger? Ansonsten wenns unbedingt ein Zeiger sein soll nimm new (später delete nicht vergessen) oder besser einen SmartPointer.
    Ansonsten empfehle ich einen Blick in ein C++ Grundlagenbuch. Denn das hier sind Grundlagen!



  • ja, ich fürchte du hast damit Recht. Mit den Grundlagen, meine ich.

    Hintergrund ist, das ich mir ein Programm bauen wollte, mit dem ich selber einen Ping senden kann, dazu verwendete ich diese Vorlage:

    http://tangentsoft.net/wskfaq/examples/rawping.html

    Aber natürlich wollte ich es umbauen und nicht 1 zu 1 übernehmen und ich glaube dabei habe ich mich verstrickt.

    Daher glaube ich, das der Rat in ein Grundlagenbuch, und in kleineren Stücken zu beginnen, richtig ist.

    Abschließend, vielen Dank für eure Antworten 🙂



  • Schau dir mal die Funktion "allocate_buffers" in dem Code an...

    PS: Der Code ist wohl für einen C++-Compiler geschrieben, ist aber im Grunde nur reiner C-Code. Für den C++ Builder (bzw. Rad Studio) würde ich dir empfehlen entsprechende Komponenten (z.B. INDY) zu benutzen (anstatt direkt die WinSocks).



  • .... ich danke dir. Das ist ein Augenöffner gewesen. Dank Copy & Paste habe ich das garnicht richtig wahrgenommen. Schandhaft, aber eben die Wahrheit 🙂

    Zu den Komponenten, was ist deren Vorteil gegenüber der Winsock Methode? Ich weiss das ich quasi keine Ahnung habe, dennoch ging ich davon aus das Winsock so zimlich das grundliegendste ist, um so etwas zu machen.

    Oder ist es mit den Komponenten nur schlicht einfach, und daher der Rat? Falls ja, wäre das für mich jetzt nicht soo interessant, weil ich will die Dinge ja verstehen, mehr oder weniger 🙂



  • *schlicht *einfacher*, sorry



  • Ja, weil die Komponente eben die WinSock-Funktionalität kapselt und dadurch einfacher zu benutzen ist (und eben eine C++-Schnittstelle zur Verfügung stellt).

    Solange du die Grundlagen von C++ (bzw. auch C) nicht verstehst, solltest du m.E. nicht die WinAPI (wie z.B. WinSocks) verwenden - das führt nur zu Frustration.


Anmelden zum Antworten