Segmentation fault beim Versuch ein array aufn hip anzulegen



  • Simon2 schrieb:

    XSpille schrieb:

    ...Ein "Man sollte ... versuchen ..." ist ganz klar eine allgemeine Empfehlung, der ich mich nicht anschließen kann 👎

    Das mag sein - aber eine Begründung wäre vllt. für alle hilfreicher gewesen als der Rückgriff auf die generelle Kompentenz- und Integritätsfrage.

    Eine kurze Begründung war im ersten Beitrag verlinkt 😉

    Simon2 schrieb:

    Meine Empfehlung lautet: Wer eine Anzahl gleichwertiger Objekte zu verwalten hat, ist mit den StdLib-Containern in vielen Fällen gut bedient und kommt schnell und mit weniger Fehlern ans Ziel.

    Dieser Meinung schließe ich mich gerne an, solange Kopien nicht zu teuer
    sind und natürlich muss der Copy-Constructor verfügbar sein.

    Simon2 schrieb:

    Für statische Arrays habe ich bislang nur Verwendung gefunden, wenn es um größere Konstantenansammlungen gleichen Datentyps geht (ein "nur größenkonstanter StdLib-Container, der zur Compilezeit angelegt wird" ist mit nicht bekannt).

    Ich habe mich nicht gegen die Verwendung von Vektoren ausgesprochen.
    Da stimme ich absolut zu 👍

    Simon2 schrieb:

    XSpille schrieb:

    ...
    'Jeder', der C++ neu lernt macht Erfahrungen mit Segmentationfaults,
    deswegen rät 'man' doch nicht von der Benutzung von Zeigern ab. ...

    Formal: Hat nun deiner Meinung nach Irgendjemand hier von "der Benutzung von Zeigern" abgeraten , oder nicht? Ich kann das hier jedenfalls nicht sehen.

    HighLigerBiMBam schrieb:

    Man sollte in C++ ganz auf Zeiger [...] verzichten versuchen ...

    (Ich denke die "..." verfälschen hier nichts)

    Simon2 schrieb:

    Inhaltlich:
    Frage an die Anfänger: Wollt ihr lieber Segmentationsfaults oder std::vector? :p

    Der Segmentationfault basiert ja auf einer fehlenden Kenntnis im Umgang mit Zeigern.

    Bei Verwendung von std::vector wäre er dann über den maximalen Index
    hinausgelaufen 😉

    Simon2 schrieb:

    Nach der "Da musste ich auch durch"-Argumentation kann man jede Form von Hilfen/Ratschlägen ablehnen - überzeugt mich nicht so.

    Es sollte eher eine
    "Eigene Erfahrungen mit Zeigern sind gut zur Verständnisschaffung"-Argumentation sein 😉

    Gruß,
    XSpille



  • Ich schätze XSpille vom Alter her nur auf 16-18. Zwei Posts, kein konstruktiver Beitrag zum Thread und sofortiges grundloses angiften anderer.

    Man kann durchaus erkennen, dass der Fragestellen aufgrund seines Fehlers und des Codes die STL nicht kennt. Daher mein Verweis man könnte dies auch mit std::vector lösen, "Schaus dir mal an!". zumal gerade die STL den Unterschied zwischen C und C++ macht.

    Ganz im Ernst warum denkst du gibt es soviele Sicherheitslücken? Von der Nutzung der STL oder von falschem Gebrauch von Arrays?

    Ich bin sogar der Auffassung man kann sollte/muss in C++ auf Zeiger verzichten! Ich will es nur keinem Aufzwängen wie du deine Meinung, dass man ausschließlich mit zeigern programmieren soll. Warum haben wir shared_ptr? Exceptionsicherheit?



  • Konvention: Nutze die Standardcontainer erst dann, wenn du im Umgang mit new & delete sicher bist.
    Alternativ: Verwende die Standardcontainer, aber beschäftige dich auch mit manueller Speicherverwaltung.
    Hintergrund: Nicht jeder entwickelt reine C++ Programme ein Leben lang mit der Konsole. Irgendwann ist der Punkt gekommen, sich mit den (C-) Funktionen des Betriebssystems auseinanderzusetzen. RAII ist hier sehr nett, aber um seine eigenen RAII-Klassen zu schreiben, muss man? Genau, nochmal das Posting lesen :).



  • Ich denke, hier muß man nicht unbedingt einem Anfänger aus didaktischen Gründen das eine oder andere erzählen, was man für sich selber nicht so machen würde.
    Täte der Profi hier gut daran, vector zu nehmen?



  • XSpile schrieb:

    Bei Verwendung von std::vector wäre er dann über den maximalen Index hinausgelaufen

    Ich denke du hast die STL nicht verstanden... Bei Schleifen bis vector.end() passiert garnichts!



  • XSpille schrieb:

    ...Da stimme ich absolut zu 👍 ...

    Wie so oft: Wenn wir fachlich konkret werden, sind die Unterschiede deutlich geringer und greifbarer.

    XSpille schrieb:

    ...
    ...

    HighLigerBiMBam schrieb:

    Man sollte in C++ ganz auf Zeiger [...] verzichten versuchen ...

    (Ich denke die "..." verfälschen hier nichts)

    denke ich auch - allerdings das Herausreißen des Satzes aus dem Zusammenhang schon.
    Für mich ist mehr als deutlich klar, dass hier der Begriff "Zeiger" als Kurzform für "direkte Objektverwaltung und mit Zeigern, Arrays und ggf. new([])/delete([])" verwendet wird (inwieweit sollte vector auch eine Zeigeralternativ für "wechselbare Verweise" sein?).

    [quote="XSpille"]...Es sollte eher eine "Eigene Erfahrungen mit Zeigern sind gut zur Verständnisschaffung"-Argumentation sein. ...[quote]
    auch hier stimme ich zu ... aber das fällt für mich definitv unter die o.g. Spezialmotivation "Wer selbst lernen will, wie ..." - und damit unter die 5% Ausnahmen.
    Außerdem halte ich dieses Lernziel für (historisch) überbewertet. Mit Iteratoren und Containern kann man bereits eine Menge lernen, was man dann problemlos auf Zeiger/Arrays (als Spezialform von Iteratoren/Zeigern) übertragen kann.

    Gruß,

    Simon2.



  • HighLigerBiMBam schrieb:

    Ich schätze XSpille vom Alter her nur auf 16-18.

    Ich bin mehr als zwei Jahre älter als du...

    HighLigerBiMBam schrieb:

    Man sollte in C++ ganz auf Zeiger [...] verzichten versuchen ...

    Mich hat man vor einigen Monaten angeflamed, dass ich hier doch bitte
    kein Halbwissen verbreiten solle(, obwohl ich Recht hatte - nur weil ich
    explizit gesagt habe, dass ich nicht sicher bin.)

    HighLigerBiMBam schrieb:

    Man kann durchaus erkennen, dass der Fragestellen aufgrund seines Fehlers und des Codes die STL nicht kennt. Daher mein Verweis man könnte dies auch mit std::vector lösen, "Schaus dir mal an!". zumal gerade die STL den Unterschied zwischen C und C++ macht.

    Wo habe ich denn etwas gegen deine Vektor-Empfehlung gesagt? 🙄

    HighLigerBiMBam schrieb:

    Ganz im Ernst warum denkst du gibt es soviele Sicherheitslücken? Von der Nutzung der STL oder von falschem Gebrauch von Arrays?

    Hast du absolut recht.

    Genau meine Meinung: "STL verwenden"
    Ich hab mich gegen das 'Zeiger-nicht-verwenden' ausgesprochen...

    HighLigerBiMBam schrieb:

    Ich bin sogar der Auffassung man kann sollte/muss in C++ auf Zeiger verzichten!

    kein Kommentar 🤡

    HighLigerBiMBam schrieb:

    Ich will es nur keinem Aufzwängen wie du deine Meinung, dass man ausschließlich mit zeigern programmieren soll.

    Ich habe nie gesagt, dass man ausschließlich mit zeigern programmieren soll...
    Wo soll ich das zum Ausdruck geebracht haben?

    HighLigerBiMBam schrieb:

    Warum haben wir shared_ptr? Exceptionsicherheit?

    Weil sie im richtigen Kontext verwendet, sehr hilfreich sind, allerdings
    kein Allerheilmittel!



  • volkard schrieb:

    Täte der Profi hier gut daran, vector zu nehmen?

    Der Profi kann durchaus den Anwendungsfall richtig beurteilen, wobei hier nichts gegen die Verwendung von Zeigern spricht. Zeiger besitzen im gegensatz zur STL einen Plus an Performance, der bei Zeitkritischen Anwendungen nicht zu verachten ist.

    XSpille schrieb:

    HighLigerBiMBam schrieb:

    Ich bin sogar der Auffassung man kann sollte/muss in C++ auf Zeiger verzichten!

    kein Kommentar 🤡

    Nur für dich so formuliert, damit deine Meinung auch ja richtig ist!



  • HighLigerBiMBam schrieb:

    Der Profi kann durchaus den Anwendungsfall richtig beurteilen, wobei hier nichts gegen die Verwendung von Zeigern spricht.

    HighLigerBiMBam schrieb:

    Man sollte in C++ ganz auf Zeiger [...] verzichten versuchen ...

    😕



  • HighLigerBiMBam schrieb:

    Zeiger besitzen im gegensatz zur STL einen Plus an Performance, der bei Zeitkritischen Anwendungen nicht zu verachten ist.

    Welch ein selten dämlicher Bockmist.
    Das ist einfach nur falsch.
    100% Unwissen.


  • Administrator

    HighLigerBiMBam schrieb:

    Zeiger besitzen im gegensatz zur STL einen Plus an Performance, der bei Zeitkritischen Anwendungen nicht zu verachten ist.

    Und das soll mal bitte jemand beweisen. Vor allem wenn man bedenkt, das ein std::vector<X>::iterator meistens nur ein typedef X* iterator ist 😉

    Grüssli



  • Dravere schrieb:

    HighLigerBiMBam schrieb:

    Zeiger besitzen im gegensatz zur STL einen Plus an Performance, der bei Zeitkritischen Anwendungen nicht zu verachten ist.

    Und das soll mal bitte jemand beweisen. Vor allem wenn man bedenkt, das ein std::vector<X>::iterator meistens nur ein typedef X* iterator ist 😉

    Grüssli

    😃 👍



  • Danke da haben wirs doch, zwei Moderatoren die auch auf meiner PRO STL Seite stehen. 👍

    Nur gut dass man diese erst mit falschäußerungen ermutigen muss zu posten.

    Für mich ist dieser Thread beendet.



  • XSpille schrieb:

    Wenn du nicht 144 Beiträge hättest, die nicht den Eindruck eines Trolls
    machen, hätte ich dich wegen des Beitrags im anderen Thread als Troll
    eingestuft...

    Ok, Troll ist bestätigt.



  • HighLigerBiMBam schrieb:

    Danke da haben wirs doch, zwei Moderatoren die auch auf meiner PRO STL Seite stehen. 👍

    Ich weiß zwar, dass Dravere pro STL ist, aber anhand seines Postings kann ich
    es eigentlich nicht erkennen 😉

    Ein STL-Code-Fragment drückt noch keine Sympathie oder Antipathie aus...

    oder wo hast du den 2. Moderator? 🙂



  • Der argumentiert seltsam.
    "Merkel ist unfähig, denn sie hat einen IQ von unter 70."
    "Nein."
    "Sieht Du, Du bist also PRO Merkel, und ich bin so geil, daß ich es Dir mit einer Lüge herauslocken konnte."
    Das ist einfach nicht logisch.



  • Vielleicht bin ich auch nur schizophren, whatever. 😃


  • Administrator

    HighLigerBiMBam schrieb:

    Vielleicht bin ich auch nur schizophren, whatever. 😃

    Ich würde eher sagen, dass du im Eifer des Gefechts etwas verhaspelst hast, es nun nicht zugeben möchtest und dich in die Enge getrieben fühlst 😉

    @XSpille,
    Es gilt aber weiterhin, dass man versuchen sollte, wenn möglich und "sinnvoll" auf Zeiger zu verzichten. 😉

    Vicious Falcon schrieb:

    Hintergrund: Nicht jeder entwickelt reine C++ Programme ein Leben lang mit der Konsole. Irgendwann ist der Punkt gekommen, sich mit den (C-) Funktionen des Betriebssystems auseinanderzusetzen. RAII ist hier sehr nett, aber um seine eigenen RAII-Klassen zu schreiben, muss man? Genau, nochmal das Posting lesen :).

    Oder am besten std::vector verwenden. Es gibt bereits viele fertig RAII Klassen in der Standardbibliothek und zukünftig noch mehr. Boost bietet auch eine Vielzahl an. Ich habe ehrlich gesagt schon länger nicht mehr mit Zeiger hantieren müssen, nur weil ich eine C Schnittstelle angesprochen habe. Höchstens habe ich vielleicht noch den Address-Of-Operator eingesetzt.

    int bufferSize = GetWndowTextLength(window_handle));
    std::vector<char> buffer(bufferSize);
    GetWindowText(window_handle, &buffer[0], buffer.size());
    

    Speicher kann man in C++ auch bei C Schnittstellen völlig über RAII verwalten. Höchstens für andere Ressourcen muss man eigene RAII Klassen einführen. Allerdings spricht man diese Ressourcen kaum über Zeiger an oder nur über versteckte Zeiger, sondern meistens geht dies über Handles. Man braucht auch kein new oder delete , usw. usf.

    Grüssli



  • Dravere schrieb:

    viel Richtiges

    Ja, statt eines int* verwende ich auch lieber vector<int>.
    Schaden tut es aber nicht, die Konzepte dahinter zu verstehen. Und wenn man es gewohnt ist, dass zu einem new immer ein delete gehört, dann weiß man auch, dass zu einem Anfordern eines Handles auch immer eine entsprechende Freigabe gehört.

    Aber das muss man ja alles nicht mehr können. Wir können ja einfach nur die Daten zwischen Standardbibiothek und boost umherschieben und nennen den Vorgang "programmieren". Grundlagen sind egal. 🤡


  • Mod

    Auch Handles darfst du gerne RAIIen.


Anmelden zum Antworten