Pointerprobleme
-
Wie gesagt: ohne mehr Informationen (sprich Code) wird dir wohl niemand helfen können.
-
Ähm was willst du noch sehen? Die kompletten 30 Files kann ich kaum posten und die wesentlichen Elemente findest du in meinem Posting oben!
-
Darkrad schrieb:
Ähm was willst du noch sehen? Die kompletten 30 Files kann ich kaum posten und die wesentlichen Elemente findest du in meinem Posting oben!
Versuche das auf ein minimales Beispiel zu reduzieren, welches für uns compilierbar ist, den gezeigten Fehler zeigt und den wichtigen Stellen aus deinem Code entspricht.
Wir können deinen Fehler sonst nicht nochvollziehen, es gibt zu viel, was du falsch gemacht haben könntest. Prinzipiell ist es möglich, C-Funktionen in C++ zu benutzen, also musst du an irgendeiner Stelle einen Fehler gemacht haben.Ansonsten bietet sich bei solchen Problemen (oder eigentlich auch allen) die Benutzung eines Debuggers an, mit dem du den Programmablauf verfolgen und vergleichen kannst.
-
Wesentlich Elemnte sind derjenige Code, der das Ergebnis potentiell beeinflusst. Niemand hat etwas von 30 Files gesagt.
Die Definitionen von A, set_b und ggf. B wären ein Anfang.
-
camper schrieb:
Die Definitionen von A, set_b und ggf. B wären ein Anfang.
Ähm und was ist mit meinem zweiten Posting? Habe ich da drin eine Blumenwiese beschrieben?
-
Darkrad schrieb:
Habe ich da drin eine Blumenwiese beschrieben?
Wenn du so direkt fragst: Ja

Die Fragmente kann man zu allem möglichen zusammensetzen (von dem "in etwas sowas" und 0xIRGENDWAS will ich gar nicht reden).PS: Bist du überhaupt sicher, daß genau diese Funktion aufgerufen wurde?
-
SeppJ schrieb:
Ansonsten bietet sich bei solchen Problemen (oder eigentlich auch allen) die Benutzung eines Debuggers an, mit dem du den Programmablauf verfolgen und vergleichen kannst.
Auweia...was glaubst du, wie ich festgestellt habe, dass meine Applikation dieses Verhalten zeigt? Mit einer Wünschelrute??
Ich habe mit einem Debugger festgestellt, dass innerhalb von set_b() der Member der Struktur gültig ist und sofort nach dem Rücksprung eben nicht mehr. Dazwischen ist schlichtweg kein Code.
Wenn da irgend eine Zeile wäre, die den Member auf irgend was anderes setzen würde, hätte ich es gesehen und würde wohl kaum hier fragen!?
-
Darkrad schrieb:
Ähm was willst du noch sehen? Die kompletten 30 Files kann ich kaum posten und die wesentlichen Elemente findest du in meinem Posting oben!
Wo ist der Aufruf der Funktion? Wie und wo wird eine Variable vom Typ A definiert?
-
CStoll schrieb:
(von dem "in etwas sowas" und 0xIRGENDWAS will ich gar nicht reden).
PS: Bist du überhaupt sicher, daß genau diese Funktion aufgerufen wurde?
Noch mal: Ich sehe es im Debugger! Das 0xIRGENDWAS ist schlichtweg nicht relevant, oder kann jemand per Telepathie auf meinen Rechner sehen und eine Hex-Adresse, die da drin steht decodieren?
Noch mal ganz langsam:
Ich gehe in diese Funktion set_b() rein, übergebe die Struktur. In set_b() wird ein Member dieser Struktur (der eben ein Pointer ist) auf enen Wert !=NULL gesetzt (also 0xIRGENDWAS).
Bis zum Ende von set_b() enthält der Pointer in dieser Struktur die richtige Adresse, sofort nach dem Rücksprung aus set_b() steht da wieder NULL drin.
Also dürfte der vorherige Inhalt des Pointers dja wohl komplett unwichtig sein, oder?
-
manni66 schrieb:
Wo ist der Aufruf der Funktion? Wie und wo wird eine Variable vom Typ A definiert?
In einer anderen Funktion, die Variable vom Typ A wurde per malloc() erzeugt.
-
Darkrad schrieb:
manni66 schrieb:
Wo ist der Aufruf der Funktion? Wie und wo wird eine Variable vom Typ A definiert?
In einer anderen Funktion, die Variable vom Typ A wurde per malloc() erzeugt.
Ich möchte keine Prosa sondern Code.
-
Darkrad schrieb:
CStoll schrieb:
(von dem "in etwas sowas" und 0xIRGENDWAS will ich gar nicht reden).
PS: Bist du überhaupt sicher, daß genau diese Funktion aufgerufen wurde?
Noch mal: Ich sehe es im Debugger! Das 0xIRGENDWAS ist schlichtweg nicht relevant, oder kann jemand per Telepathie auf meinen Rechner sehen und eine Hex-Adresse, die da drin steht decodieren?
Nein, können wir nicht (und der Service hat mir neulich mitgeteilt, daß die Reperatur meiner Kristallkugel sich noch etwas verzögern könnte). Deshalb wärst du mal so freundlich, den Code in einem etwas größeren Zusammenhang zu zeigen.
(eine Vermutung wäre, daß du in der Funktion den übergebenen Zeiger überschrieben hast und nun mit etwas anderem arbeitest)PS: Das folgende ist eigentlich nicht mein Stil, aber es muß wohl sein: Wenn du weitere so nichtssagende Beiträge lieferst, verwende ich meinen Schlüsselbund.
-
Bevor die Gegenfragen hier noch dümmlicher werden und irgend einer nach der Farbe meiner Maus fragt: vergesst es.
Sorry, aber das ist wohl der inkompetenteste Thread überhaupt. Nur mal was zu Nachdenken: wenn der 100% identische Code in C (also aus Dateien mit Endung .c) korrekt funktioniert und nur durch Umbenennen nach .cpp und Recompilieren kaputt geht - wie kann es da irgend eine falsche Verwendung oder Überschreiben des Pointers sein? Denkt der C-Compiler mit und legt mir heimlich eine neue Variable an?
EOF.
-
C++ ist eben nicht 100%ig kompatibel zu C. Vielleicht verwendest du etwas, das in C++ eben anders läuft.
Die Leute hier sind ziemlich kompetent und programmieren seit Jahren, großteils auch beruflich. Du bist hier der inkompetente.
-
Darkrad schrieb:
Sorry, aber das ist wohl der inkompetenteste Thread überhaupt.
Tja, daran bist du aber selber schuld - wenn du (auch nach mehrfachen Nachfragen) keinen gescheiten Input lieferst, kannst du auch keine brauchbaren Antworten erwarten.
Nur mal was zu Nachdenken: wenn der 100% identische Code in C (also aus Dateien mit Endung .c) korrekt funktioniert und nur durch Umbenennen nach .cpp und Recompilieren kaputt geht - wie kann es da irgend eine falsche Verwendung oder Überschreiben des Pointers sein? Denkt der C-Compiler mit und legt mir heimlich eine neue Variable an?
Da hast du womöglich das weite Feld des undefinierten Verhaltens betreten - da kommt es mitunter auf Kleinigkeiten an, um aus einem scheinbar funktionierenden Code eine mittlere Katastrophe werden zu lassen.
PS: Die Farbe deiner Maus interessiert hier niemanden
(wir sind hier Programmierer und keine Stil-Berater)
-
Darkrad schrieb:
Nachdenken: wenn der 100% identische Code in C (also aus Dateien mit Endung .c) korrekt funktioniert und nur durch Umbenennen nach .cpp und Recompilieren kaputt geht - wie kann es da irgend eine falsche Verwendung oder Überschreiben des Pointers sein?
Damit wäre die Frage geklärt. Erfahrungsgemäß haben 99% aller Programmierprobleme etwas mit dem Quelltext zu tun. Wieso ......
ach was solls, das ist mir zu blöd...
Wieso stellen Leute, die glauben schon alles zu wissen, überhaupt Fragen?Ein Link zu wie-stelle-ich-eine-Frage plus Thread schließen scheint mir hier das vernünftigste zu sein.
-
Ein Beitrag von camper in deutlich genervtem Tonfall. Das ist ganz was neues (zumindest für mich)

(@camper: verstehe das als Kompliment! Du bist (sonst) immer so ruhig und sachlich, das ist echt bewundernswert)
-
CStoll schrieb:
Da hast du womöglich das weite Feld des undefinierten Verhaltens betreten - da kommt es mitunter auf Kleinigkeiten an, um aus einem scheinbar funktionierenden Code eine mittlere Katastrophe werden zu lassen.
war die eigentliche frage nicht genau danach?
-
The Grid schrieb:
CStoll schrieb:
Da hast du womöglich das weite Feld des undefinierten Verhaltens betreten - da kommt es mitunter auf Kleinigkeiten an, um aus einem scheinbar funktionierenden Code eine mittlere Katastrophe werden zu lassen.
war die eigentliche frage nicht genau danach?
Nein, die Frage war warum geht es in C und in C++ nicht. Bei undefiniertem Verhalten ist das Ergebnis in beiden Sprachen zufällig.
-
Nur mal zur Info für die vielen, ach so kompetenten, hoch qualifizierten und hauptberuflich eben so professionellen Experten hier: Das Problem ist gelöst.
Und: es war weder irgend eine falsche Pointerverwendung noch hätte auch nur irgend eine Zeile Code was genutzt (ich hätte das komplette Programmpaket posten können ohne dass es zur Problemlösung beigetragen hätte).
Vielmehr war es ein Problem mit der Buildumgebung. Ach ja, die Lösung habe ich über ein anderes Forum bekommen, in dem nicht ein einziger irgend was von "ey du Trottel, gib Code oder es gibt auf Fresse" gegrölt hatte, die waren dort auch so - und durch kompetentes und vor allem höfliches Nachfragen - in der Lage, den entscheidenden Tipp zu geben.
Hoffentlich entwickelt keiner von euch "Experten" wirklich wichtige Software...