free()



  • Dann wäre es an sich ja klüger einen double zu verwenden .. Danke.

    Prinzipiell muss es kein double sein. Nur würde mich interessieren, wieso es hier zu einem Problem kommt, wenn ich einen float-Wert angebe ..

    Wegen der Darstellung des Codes:
    Ich wollte nur das Prinzip verdeutlichen, wie ich die Funktion aufrufe und was für Parameter verwendet werden. An und für sich ist das auch kein Hexenwerk. Nur komischerweise spinnt er bei mir bei einem bestimmten Datentyp.
    Ich kann leider auch nicht die komplette Funktion mit der main hier posten, da dies viel zu unübersichtlich würde. Der relevante Teil, war der Teil, den ich hier veröffentlicht habe: http://ideone.com/ZvI1C

    Und da funktioniert das Ganze ja auch. Die Frage, die ich mir stelle ist: Wo ein direkt übergebener Wert an eine Funktion verändert wird, wenn die erste Anweisung in der Funktion ein printf() ist. Eigtl ist dies doch nicht möglich.

    Bei meiner Frage ging es nicht um Grundverständnisfragen, oder gar einen Streit, um Formatierungsausgabemöglichkeiten.

    Aber um hier nicht noch weitere genervte Kommentare zu sammeln, belasse ich es dabei und suche die Lösung des Problems selbst.

    Nebenbei sei nur angemerkt, dass ich niemanden gezwungen habe mir zur helfen. Und falls jemand meint sich des öfteren aufregen zu müssen, da ihm meine Problembeschreibung nicht passt, dann sollte er es sein lassen, noch weiter unnötige Anmerkungen zu schreiben, dass er keine Lust hat zu helfen. Was daran produktiv sein soll, versteh ich nicht ganz ..

    Für die anderen Tips bin ich allerdings dankbar.



  • fabarazzi schrieb:

    Aber um hier nicht noch weitere genervte Kommentare zu sammeln, belasse ich es dabei und suche die Lösung des Problems selbst.

    Richtig. Die Lösung des Problems liegt bei dir. Das Problem selbst auch.
    Der Compiler hat immer recht.



  • fabarazzi schrieb:

    ... um Formatierungsausgabemöglichkeiten.

    Noch einmal ganz deutlich: Wenn Du mit printf ein float oder ein double ausgibst, dann ist die richtige Formatierungsanweisung: %f
    Das gilt nicht nur für float, sondern eben auch für double. Wenn Du das beachtest, sollte Dein Problem gelöst sein.



  • Belli schrieb:

    Noch einmal ganz deutlich: Wenn Du mit printf ein float oder ein double ausgibst, dann ist die richtige Formatierungsanweisung: %f
    Das gilt nicht nur für float, sondern eben auch für double. Wenn Du das beachtest, sollte Dein Problem gelöst sein.

    Das ist eben nicht das Problem das ich habe. Ich übergebe einen Floatwert und gebe ihn mit printf und %f aus und als Wert wird aber bei der Übergabe von 1.0f der Wert 0.00000 ausgegeben. Bei dem Wert 1.838 wird jetzt beispielsweise -2.00000 ausgegeben ..


  • Mod

    fabarazzi schrieb:

    Nebenbei sei nur angemerkt, dass ich niemanden gezwungen habe mir zur helfen. Und falls jemand meint sich des öfteren aufregen zu müssen, da ihm meine Problembeschreibung nicht passt, dann sollte er es sein lassen, noch weiter unnötige Anmerkungen zu schreiben, dass er keine Lust hat zu helfen. Was daran produktiv sein soll, versteh ich nicht ganz ..

    Nein, du zwingst niemanden. Aber du erwartest Hilfe. Und dir wurde 4x erklärt, warum man dir bei der Art deiner Beiträge nicht helfen kann. Und dir wurde gesagt, was du ändern musst, damit du kompetente Hilfe bekommen kannst. Das hast du nie getan, sondern bist stattdessen beleidigt geworden. Und du hast auch tatsächlich bis jetzt keine Hilfe zu deiner eigentlichen Frage bekommen. Ob da wohl ein Zusammenhang besteht?

    Naja, inzwischen dürftest du alle Helfer vergrault haben und nur noch ein paar Schaulustige anziehen, die sich an deinem nächsten Beitrag auf morbide Weise erfreuen. vielleicht hast du ja mit denen Glück, wenn du endlich mal das geforderte Minimalbeispiel bringst.



  • Ich war zu keiner Zeit beleidigt. Habe dies auch nie so rüberbringen wollen.
    Das Problem habe ich jetzt gelöst.
    Falls es jemanden interessiert:

    Dadurch, dass die Funktion in einer anderen .c-Datei definiert ist, muss ich in der .c-Datei, in der die Funktion aufgerufen wird, die Funktion im entsprechenden .h-File als extern deklarieren (extern int f_steps(STEP *,int,float)). Und diese Deklaration ist mir in die falsche header-Datei gerutscht. Dadurch hat er die Funktion zwar aufgerufen, wusste aber nicht, welche Datentypen die Parameter besitzen ..



  • Das extern ist bei Funktionsdeklarationen nicht nötig.

    Und der Compiler meckert das auch an, wenn er nicht genau weiss wie die Funktion deklariert ist.
    Behandele Warnungen wie Fehler!


  • Mod

    fabarazzi schrieb:

    Dadurch, dass die Funktion in einer anderen .c-Datei definiert ist, muss ich in der .c-Datei, in der die Funktion aufgerufen wird, die Funktion im entsprechenden .h-File als extern deklarieren (extern int f_steps(STEP *,int,float)). Und diese Deklaration ist mir in die falsche header-Datei gerutscht. Dadurch hat er die Funktion zwar aufgerufen, wusste aber nicht, welche Datentypen die Parameter besitzen ..

    Das ist ja fein. Und nun guck mal in den Code den du uns gezeigt hast. Diese entscheidende Stelle war kein einziges Mal dabei. Dabei hätten dir das 80% der Leser spätestens beim zweiten Blick auf diesen Fehler sofort erklären können. Und nun verstehst du hoffentlich, warum dir niemand helfen konnte.



  • Ok, entfernt. Danke



  • Wie oft hast du die Funktion denn vorher aufgerufen. Steht die irgendwo im Quelltext mit etwas anderem als 1.0f ?

    Wenn der Compiler nicht weiss, wie die Funktion deklariert ist, nimmt er an, dass das was du geschrieben hast richtig ist. ⚠ Er gibt aber eine Warnung.

    Wenn du beim ersten mal ein int oder double hast, wandelt der Compiler bei den nächsten Aufrufen den Parameter halt in int (oder double) und übergibt ihn an die Funktion.

    Wenn der Compiler keine Fehler meldet, bedeutet das nicht, dass das Programm fehlerfrei ist.

    Und wenn keine Warnung kommt, setz den Warnlevel hoch und schalte alle Warnungen an.



  • Die Funktion wurde dort das erste Mal aufgerufen - testweise auch nur mit 1.0f. Das Problem war die Deklaration .. jetzt funktionierts ja. Wie gesagt, hab die Deklaration in der falschen .h-Datei gehabt, die damit überhaupt nichts zu tun hatte..

    SeppJ schrieb:

    Das ist ja fein. Und nun guck mal in den Code den du uns gezeigt hast. Diese entscheidende Stelle war kein einziges Mal dabei. Dabei hätten dir das 80% der Leser spätestens beim zweiten Blick auf diesen Fehler sofort erklären können. Und nun verstehst du hoffentlich, warum dir niemand helfen konnte.

    An die .h-Datei hatte ich anfangs selber nicht gedacht.. sry.. dachte zunächst, dass die Aufteilung in zwei verschiedene .c-Dateien für sich spricht (dass entsprechende .h-Dateien vorliegen)

    Also nochmal sry für die Missverständnisse


Anmelden zum Antworten