63
submitted 5 days ago* (last edited 4 days ago) by [email protected] to c/[email protected]

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.

top 50 comments
sorted by: hot top new old
[-] [email protected] 9 points 4 days ago* (last edited 4 days ago)
        c
           c
              c
ccccc      c
              c
            c
          c

Edit: sollte eigentlich nicht scheiße aussehen, hab aber grad kein Bock das zu fixen und ich finde ein kaputter Zeiger in c ist auch ein passendes Symbol hier.

[-] [email protected] 25 points 5 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.

[-] [email protected] 12 points 5 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.

[-] [email protected] 8 points 4 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.

[-] [email protected] 6 points 4 days ago* (last edited 4 days ago)

Du meinst die hoffentlich an der richtigen Stelle mit \0 enden.

[-] [email protected] 2 points 4 days ago

Hab ich geschrieben. Hat das Markierunter irgendwo versagt?

[-] [email protected] 3 points 4 days ago

Ja, behoben. Meinte auch das hoffentlich weil das ja mit C zum Glück nicht garantiert ist. Hab es angepasst um es klarer zu machen.

Ist aber ganz lustig da x86 extra Instruktionen für C Fäden hat.

[-] [email protected] 5 points 5 days ago

Fäden

Fäden sind Threads.

[-] [email protected] 1 points 3 days ago* (last edited 3 days ago)

Nene, die erkennt man daran, dass sie hingerichtet werden sollen.

[-] [email protected] 4 points 5 days ago
[-] [email protected] 5 points 4 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.

[-] [email protected] 1 points 3 days ago

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

[-] [email protected] 2 points 4 days ago

Threads sind sowas von Laufmaschen.

[-] [email protected] 1 points 4 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.

[-] [email protected] 8 points 5 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

[-] [email protected] 1 points 3 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.

[-] [email protected] 1 points 3 days ago* (last edited 2 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.

[-] [email protected] 2 points 3 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.

[-] [email protected] 1 points 2 days ago

Edith: *zeigen lassen

[-] [email protected] 6 points 5 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.

[-] [email protected] 4 points 5 days ago

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

[-] [email protected] 19 points 5 days ago
void **ptr;

wie wäre es mit Zeiger Zeiger?

[-] [email protected] 10 points 4 days ago
void ** (**ptr)();

Wie wäre es mit Zeiger Zeiger auf eine Methode die einen Zeiger Zeiger zurück gibt? Ich liebe C

[-] [email protected] 4 points 4 days ago
const char * const (* const foo)[](void *[]);

Ich weiß gar nicht was du meinst. Macht doch Sinn /s

Tatsächlich hat D es geschaft die C Deklarationen ordentlich aufzuräumen ohne den Syntax groß zu ändern wie bspw. Rost. Dafür hat sich D aber leider an anderer Stelle gewaltig das Genick gebrochen.

[-] [email protected] 1 points 3 days ago

Nämlich an welcher?

[-] [email protected] 17 points 5 days ago

Wenn es nur eine Sprache gäbe, mit der Pointer effizient weg abstrahiert werden, UTF-8 direkt unterstützt wird und die direkt ein Bau und Bibliotheken Management System aus diesem Jahrtausend mit bringt. Ideal wäre natürlich wenn das genauso zu Maschinencode übersetzt wird und damit gleich schnell wie C läuft.

Ist natürlich vollkommen unmöglich, aber man darf träumen.

[-] [email protected] 1 points 3 days ago

Zeiger wegabstrahieren heißt Gott spielen. Wer erwartet c++ oder irgendeine andere Sprache löst das Problem, dass Daten im Speicher verteilt sind ist naive. Wer ein Haus in der Stadt kauft kann nicht einfach ein 400m2 Garten DLC herrunterladen.

[-] [email protected] 8 points 4 days ago

Fairer Weise, wenn man Zeiger nicht versteht, wird man mit dem Verleih-Prüfer auch nicht klar kommen. Das wird dann auch nur maximal frustrierend sein. Für einen blutigen Anfänger, der sich noch mit Zeigern abmüht ist der gelegentliche Segfault sicher angenehmer, als bei jedem kleinen Fehler, der eventuell aufgrund glücklicher Umstände nicht mal zu Problemen geführt hätte, in Kompilierfehler zu rennen. Als Anfänger hätte ich die wichtige Arbeit des Verleih-Prüfers sicher noch nicht zu schätzen gewusst und wahrscheinlich eher als Gängelung wahrgenommen.

Das gesagt, ich liebe Rost und grade der maschinennahen Programmierung ist es das beste, was ihr seit Ewigkeiten passiert ist. Im

[-] [email protected] 1 points 4 days ago

Das gute ist, das der Übersetzter dir hilft statt in C einfach Dinge wegzuoptimieren. Er erklärt warum was nicht erlaubt ist.

Was du prüfst ob der Zeiger null ist. Darf er nicht sein, weg damit. Viel Spaß mit dem Speicherfehler. 👋

[-] [email protected] 2 points 3 days ago

Kleiner Trick aus der Industrie, einfach die Entkäfer Version ausliefern. Dann funktioniert sogar mein Code!

[-] [email protected] 2 points 3 days ago

Bei uns wird ein Programm mit MS C Compiler 98 übersetzt, weil mit neueren Compiler das Programm nicht mehr läuft.

Denn es wird mit volatile Thread Synchronisierung betrieben. 🥴

[-] [email protected] 1 points 4 days ago

Ich weiss heute noch nicht, wie man eine bidirektionale verkettete Liste baut (in sicherem Rost meine ich nicht möglich) oder Referenzen von anderen Objekten in einem Strukt korrekt Lebenszeit annotiert.

[-] [email protected] 1 points 3 days ago

Geht halt mit Pointern. Hab ich schon gemacht. Wo es wirklich spannend wird sind intrinsische verkettete listen (also die Listen Heads sind Teil vom struct, nicht das struct selbst).

Problem ist, dass du immer garantieren musst, dass sich die Addresse der Listenobjekte nicht ändert. Dafür gibt's Pin, Box, und Versprechen auf Ehre.

[-] [email protected] 1 points 3 days ago

Für die bidirektionale Liste muss man, soweit ich weiß, mit Rc auf der einen Seite und rc::Weak auf der anderen Seite arbeiten.

Fairerweise muss ich aber sagen, dass ich es noch nie ausprobiert habe. Sowas braucht man ja doch eher selten, und wenn man es braucht, will man oftmals einfach VecDeque.

[-] [email protected] 1 points 3 days ago* (last edited 3 days ago)

Vergiss nicht da noch ein RefCell rein zu packen weil DerefMut nicht für Rc implementiert ist.

[-] [email protected] 6 points 5 days ago

Dachte gerade du hättest das „u“ mit einem „o“ verwechselt. Dann merkte ich, ich liege falsch

[-] [email protected] 2 points 4 days ago

Kommt das snobbische verhalten die rostige Entwicklys im Kernel an den Tag legen mit der Sprache gratis dazu?

[-] [email protected] 5 points 4 days ago

Ja, probiers aus, kommt von selbst.

[-] [email protected] 11 points 5 days ago

Mit Rost wäre das nicht passiert. 🤷‍♂️

[-] [email protected] 13 points 5 days ago

Vor allem wollen sie nie schuld an irgendwas sein und zeigen immer auf etwas anderes zum verdächtigen.

[-] [email protected] 5 points 5 days ago* (last edited 5 days ago)

Blitzzurücks entschlosst.

[-] [email protected] 4 points 5 days ago

Kein C, kein Problem. Wenn man das letzte bisschen Performance nicht braucht und nicht durch äußere Umstände gezwungen wird, einfach was anderes nehmen.

[-] [email protected] 8 points 5 days ago

Ich will es ja lernen. Es ist ja schön mal was anderes auszuprobieren, aber die Pointer sind schon ein bisschen komplexer als ich es gewohnt bin.

load more comments (4 replies)
[-] [email protected] 2 points 4 days ago

Warum gibt es eigentlich keine Referenzen oder Schlauzeiger in C? In C++ gelten unnötige Rohzeiger aus gutem Grund als schlechter Stil.

[-] [email protected] 4 points 4 days ago

Das Problem mit Schlauzeigern ist, dass sie zwangsläufig versteckten Kontrollfluss mit sich bringen. Das ist a) mit dem C Syntax meiner Meinung nach nicht einfach machbar ohne Pandoras Büchse ähnlich wie C++ und Rost zu öffnen (nicht, dass das zwangsläufig schlecht ist, aber das ist halt nicht C) und b) auch nicht unbedingt wünschenswert. Eine der schönen Sachen an C ist, dass jeglicher Kontrollfluss direkt vor einem liegt und nichts passiert, was man nicht direkt sieht. Wenn man mal mit größeren C++ Bibliotheken, die die Möglichkeiten von Klassen und Vorlagen wirklich ausschöpfen, gearbeitet hat, merkt man schon was das doch für ein Segen sein kann.

[-] [email protected] 2 points 5 days ago

@cows_are_underrated

Sage mir, dass du ein ich_iel Meme im Fediverse bist ohne mir zu sagen, dass du ein ich_iel Meme im Fediverse bist

load more comments
view more: next ›
this post was submitted on 25 Jul 2025
63 points (92.0% liked)

ich_iel

3792 readers
566 users here now

Die offizielle Zweigstelle von ich_iel im Fediversum.

Alle Pfosten müssen den Titel 'ich_iel' haben, der Unterstrich darf durch ein beliebiges Symbol oder Bildschriftzeichen ersetzt werden. Ihr dürft euch frei entfalten!


Matrix


📱 Empfohlene Schlaufon-Applikationen für Lassmich


Befreundete Kommunen:

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]


Sonstiges:

Zangendeutsch-Wörterbuch


Regeln:

1. Seid nett zueinander

Diskriminierung anderer Benutzer, Beleidigungen und Provokationen sind verboten.

2. Pfosten müssen den Titel 'ich_iel' oder 'ich iel' haben

Nur Pfosten mit dem Titel 'ich_iel' oder 'ich iel' sind zugelassen. Alle anderen werden automatisch entfernt.

Unterstrich oder Abstand dürfen durch ein beliebiges Textsymbol oder bis zu drei beliebige Emojis ersetzt werden.

3. Keine Hochwähl-Maimais oder (Eigen)werbung

Alle Pfosten, die um Hochwählis bitten oder Werbung beinhalten werden entfernt. Hiermit ist auch Eigenwerbung gemeint, z.b. für andere Gemeinschaften.

4. Keine Bildschirmschüsse von Unterhaltungen

Alle Pfosten, die Bildschirmschüsse von Unterhaltungen, wie beispielsweise aus WasistApplikaton oder Zwietracht zeigen, sind nicht erlaubt. Hierzu zählen auch Unterhaltungen mit KIs.

5. Keine kantigen Beiträge oder Meta-Beiträge

ich_iel ist kein kantiges Maimai-Brett. Meta-Beiträge, insbesondere über gelöschte oder gesperrte Beiträge, sind nicht erlaubt.

6. Keine Überfälle

Wer einen Überfall auf eine andere Gemeinschaft plant, muss diesen zuerst mit den Mods abklären. Brigadieren ist strengstens verboten.

7. Keine Ü40-Maimais

Maimais, die es bereits in die WasistApplikation-Familienplauderei geschafft haben oder von Rüdiger beim letzten Stammtisch herumgezeigt wurden, sind besser auf /c/ichbin40undlustig aufgehoben.

8. ich_iel ist eine humoristische Plattform

Alle Pfosten auf ich_iel müssen humorvoll gestaltet sein. Humor ist subjektiv, aber ein Pfosten muss zumindest einen humoristischen Anspruch haben. Die Atmosphäre auf ich_iel soll humorvoll und locker gehalten werden.

9. Keine Polemik, keine Köderbeiträge, keine Falschmeldungen

Beiträge, die wegen Polemik negativ auffallen, sind nicht gestattet. Desweiteren sind Pfosten nicht gestattet, die primär Empörung, Aufregung, Wut o.Ä. über ein (insbesonders, aber nicht nur) politisches Thema hervorrufen sollen. Die Verbreitung von Falschmeldungen ist bei uns nicht erlaubt.


Bitte beachtet auch die Regeln von Feddit.org

founded 1 year ago
MODERATORS