Segmentation fault beim Versuch ein array aufn hip anzulegen



  • 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.



  • Ich habe nichts anderes behauptet. Die Freigabe darf aber auch nicht in der RAII-Klasse vergessen werden.



  • Vicious Falcon schrieb:

    Ich habe nichts anderes behauptet. Die Freigabe darf aber auch nicht in der RAII-Klasse vergessen werden.

    Ich dachte, das wäre quasi per Definition so.


  • Administrator

    Vicious Falcon schrieb:

    Grundlagen sind egal. 🤡

    Man sollte sich fragen, was zu den Grundlagen gehört, bzw. in welcher Reihenfolge man es lernen möchte. RAII und std::vector gehören weit an den Anfang. new und delete, wie auch Zeiger, gehören weiter nach hinten. Sobald man zu diesen kommt, kann man nämlich am bereits gelernten aufzeigen, wie man damit am besten arbeitet. Nämlich eben RAII einsetzen und als Beispiel könnte man std::vector nennen.

    Du kannst jemanden RAII beibringen, ohne auf Zeiger oder Speicherverwaltung einzugehen. Daher kannst du ihm auch beibringen, dass er die Ressource freigeben muss.

    Grüssli


Anmelden zum Antworten