Diese Dinger verursachen am laufenden Band Probleme. Ich habe ja durchaus Spaß daran, wann man auch mal wirklich den eigenen Kopf benutzen muss beim Programmieren, aber Zeiger sind schon eine gewisse Herausforderung.

Edit: Es lag nicht an den Zeigern, sondern daran, dass ich ein paar kleine Fehler in meinem Code hatte, die ich übersehen habe.

  • aaaaaaaaargh@feddit.org
    link
    fedilink
    arrow-up
    26
    ·
    6 days ago

    Ich hab das nie so richtig verstanden, warum Zeiger so problematisch sind. Es ist halt eine Referenz auf ein Stück Speicher, über dem ein Datenmodel gespannt liegt. Die einzige Hürde liegt darin, die Verantwortung über das Bestehen dieses Speichers ein wenig zu planen, aber das hat man bei schlauen Zeigern implizit genauso, man muss sie nur nicht selbst wegräumen.

    • da_cow (she/her)@feddit.orgOP
      link
      fedilink
      arrow-up
      12
      ·
      6 days ago

      Ich hasse diese Elendigen Dinger halt besonders, wenn ich irgendwas mit Strings Fäden machen will. Es gibt bei der scheiße immer Probleme.

      • d_k_bo@feddit.org
        link
        fedilink
        arrow-up
        8
        ·
        6 days ago

        Dann wäre vielleicht eine Sprache besser, die echte Fäden unterstützt und nicht nur Zeiger zu Speicher, der halt irgendwann mit \0 endet.

          • Kornblumenratte@feddit.org
            link
            fedilink
            arrow-up
            5
            ·
            5 days ago

            Wenn ich die ultimative Quelle allen Wissens und aller Weisheit befrage, scheint der Begriff thread tatsächlich am ehesten dem Faden zu entsprechen, string hingegen der Schnur.

            Der Vollständigkeit halber:

            yarn = Garn twine = Zwirn rope = Seil

            Für Tau finde ich keine Entsprechung im Deutschen, Während cord und cordage ein Oberbegriff für alles Schnurige von Zwirn bis Tauwerk zu sein scheint.

            Spanend, wie viele Worte wir für lange, flexible Objekte gaben.

            • Tlf@feddit.org
              link
              fedilink
              arrow-up
              1
              ·
              4 days ago

              Das hat glaube damit zutun, dass sie auf unterschiedliche Art hergestellt werden. Je nach Endprodukt hat es einen eigenen Namen

      • Randelung@lemmy.world
        link
        fedilink
        arrow-up
        1
        ·
        5 days ago

        Kann mich da nur anschliessen. Wenn es nicht C sein muss, lass es lieber. Klar lernt man viel dabei, aber die Gehirnakrobatik, die man sich dabei aneignet, ist sonst nirgends mehr anwendbar.

    • Kwdg@discuss.tchncs.de
      link
      fedilink
      arrow-up
      8
      ·
      6 days ago

      Schlaue Zeiger sind auch kein Problem. Das Problem bei rohen Zeigern ist, wie du schon sagtest, das Management. Man muss halt immer im Blick haben wann und ob der Zeiger befreit werden muss.

      Wir hatten vorhin auf der Arbeit grad ein Arbeitsspeicherleck, weil in einer Schleife ein Zeiger von einer Bibliothek kam und der Zeiger nicht befreit wurde

      • aaaaaaaaargh@feddit.org
        link
        fedilink
        arrow-up
        1
        ·
        4 days ago

        Sowas lässt sich ganz gut mit statischer als auch dynamischer Quellcodeanalyse finden. Speicherlecks entdecke ich meist zuverlässig mit valgrind und Rennbedingungen über den Fadenreiniger von gcc.

    • bennypr0fane@discuss.tchncs.de
      link
      fedilink
      Deutsch
      arrow-up
      1
      ·
      edit-2
      3 days ago

      Das bösartige an Zeigern ist, dass sie nicht einfach nur ein Datentyp sind. Sondern ein Datentyp der verschiedene Datentypen haben kann. Man kann sie nicht einfach nur auf irgendeinen Speicherplatz zeigen lassen, sondern auf einen Speicherplatz mit einem Inhalt bestimmten Datentyps. Der aber dann implizit definiert ist, damits schwerer zu durchblicken ist.

      • aaaaaaaaargh@feddit.org
        link
        fedilink
        arrow-up
        2
        ·
        4 days ago

        So gesehen ist das nicht einmal ein Datentyp, sondern einfach ein Ganzzahlwert mit einer von der Architektur abhängigen Bitlänge, der die Adresse des referenzierten Speichers beginnend mit 0x0 angibt. Daran ist nichts bösartig und man lässt sie nicht irgendwo, denn der Zeiger selbst kennt keinerlei Datentyp, auf den er zeigt. Und um das implizite ein wenig zu lindern, existieren ja Macros und Unions.

    • bleistift2@sopuli.xyz
      link
      fedilink
      Deutsch
      arrow-up
      7
      arrow-down
      1
      ·
      6 days ago

      Selbst in JavaScript beißen mich Objektreferenzen gelegentlich. Ich glaube, das Problem ist darin begründet, dass man – anders als bei einer lokalen Variable – nicht mehr Alleinherrscher über die Daten ist und damit rechnen muss, dass sie andernorts verändert werden.

      Oder man geht davon aus, dass eine kopierende Operation die Daten kopiert statt nur einen Zeiger. Dann wundert man sich später, warum Dinge, die unterschiedlich sein sollten, gleich sind.

    • jokro@feddit.org
      link
      fedilink
      arrow-up
      4
      ·
      6 days ago

      Du siehst halt lokal nicht wo überall ein Zeiger drauf sein könnte sondern musst den Code durchgucken