Merkwürdiger Programmabsturz



  • Danke erstmal für die Antwort:

    Ja da hast du recht, aber die free's würde ich ja am Ende vom Programm einbauen. Und da kommt er ja nie an...

    Und free klappt auch irgendwie nicht.
    Der Befehl free(h_img); bringt diesen Fehler: expression preceding parentheses of apparent call must have (pointer-to-) function type

    Aber es sind auch zur Laufzeit noch 4GB RAM frei...

    Sorry wenn ich mich vielleicht etwas doof anstelle, aber ich bin noch nicht so lange mit C++ zugange...



  • faithless schrieb:

    Der Befehl free(h_img); bringt diesen Fehler: expression preceding parentheses of apparent call must have (pointer-to-) function type

    Heißt auf deutsch: "Das sieht aus wie ein Funktionsaufruf, mir ist aber nicht bekannt, dass free eine Funktion (oder ein Pointer darauf) wäre."

    Den Code habe ich mir jetzt nicht angeschaut - wäre klasse wenn du dir die Zeit nimmst und eine gestraffte Fassung (aufs Wesentliche reduziert, aber compilierbar und mit dem gleichen Laufzeitfehler) hier postest.


  • Mod

    pumuckl schrieb:

    faithless schrieb:

    Der Befehl free(h_img); bringt diesen Fehler: expression preceding parentheses of apparent call must have (pointer-to-) function type

    Heißt auf deutsch: "Das sieht aus wie ein Funktionsaufruf, mir ist aber nicht bekannt, dass free eine Funktion (oder ein Pointer darauf) wäre."

    Und noch die (vermutliche) Lösung: free wird in cstdlib deklariert und liegt im Zweifelsfall sogar im Namespace std:: (bei den Standardbibliotheken die ich so kenne aber auch global). Komisch, dass malloc funktioniert...

    Allgemein: Wenn seldon von vielen mallocs und keinem free berichtet, dann wundern mich solche Fehler nicht zu sehr. Klingt eher nach schlechtem C, denn nach C++. In C++ hast du so viel bessere Möglichkeiten der Speicherverwaltung, bei denen, wenn du sie durchgängig benutzt, gar nichts mehr schiefgehen kann.

    ⚠ Deine Frage ist etwas ungünstig gestellt. Du schließt gerade jeden Helfer aus, der mit VS-Projekten nichts anfangen kann (z.B. mich) und die Hemmschwelle, ein riesiges Programm runterzuladen und selbstständig auszuprobieren, weil du berichtest, dass da irgendwo ein Fehler drin ist, ist enorm hoch. Daher:

    pumuckl schrieb:

    wäre klasse wenn du dir die Zeit nimmst und eine gestraffte Fassung (aufs Wesentliche reduziert, aber compilierbar und mit dem gleichen Laufzeitfehler) hier postest.

    +1.



  • Hallo Ihr Zwei,

    ich habe das ganze jetzt nochmal in ein neues sauberes Projekt reinkopiert. Und es auf das Bild laden und einaml drüber loopen beschränkt... das Funktioniert tadellos... Jetzt raff' ich garnix mehr...

    Welche möglichkeiten der Speicherverwaltung meinst du denn? Ich hab' es in der FH mit malloc gelernt... Bin gern bereit was dazu zu lernen...!



  • new, delete, shared_ptr, unique_ptr, vector
    um dir mal ein paar Begriffe zu nennen, die dich bei google weiterbringen sollten
    Ansonsten ist jedes C++ Buch (außer von Jürgen Wolf) dein Freund

    greetz KN4CK3R


  • Mod

    faithless schrieb:

    Ich hab' es in der FH mit malloc gelernt... Bin gern bereit was dazu zu lernen...!

    Das kann man nicht in ein paar Worten erklären. Das braucht ein Buch mit dicken Kapiteln. malloc ist jedenfalls eher als C-Relikt anzusehen. In C++ gibt es selbstverwaltende dynamische Container mit unterschiedlichen Charakteristiken, aber (weitgehend) einheitlichem Interface. Der wichtigste dürfte std::vector sein, welcher quasi das gleiche macht wie malloc, aber ohne die Fallstricke und mit Kompatibilität zu nicht POD-Datentypen (es ist allgemein keine gute Idee, die C-Bibliothek gemischt mit C++-Mitteln zu benutzen, weil die C-Bibliothek nicht mit den komplexen C++-Datentypen zurecht kommt, viele Fehler aber nicht (wie in C++) zur Compilezeit erkannt werden können).

    Wenn du davon aber noch nie etwas gehört hast, dann wirst du erst einmal C++-Grundlagen lernen müssen, um mit dieser Antwort überhaupt etwas anfangen zu können. Ich fürchte, du wirst auf der FH wohl entweder C gelernt haben, oder schlimmer noch, man hat dich das berüchtigte C/C++ (auch bekannt als C mit cout oder C mit Klassen) gelehrt.



  • 😕 na super...

    Ich muss das blöde Projekt in ner Woche abgeben. Und offenbar muss der Fehler irgendwo in dem Context stecken und ich kann es euch nicht in einer auf das wesentliche reduzierten Datei zur verfügung stellen 😞

    Danke noch für die tipps !

    Kann sich vielleicht trotzdem jemand erbarmen sich mal den Code an zu sehen, auch wenn es etwas viel ist ?



  • faithless schrieb:

    Und free klappt auch irgendwie nicht.
    Der Befehl free(h_img); bringt diesen Fehler: expression preceding parentheses of apparent call must have (pointer-to-) function type

    Das liegt daran, dass du einen unsigned int free; definiert hast, der die Funktion free verdeckt. Du solltest ihn umbenennen.



  • ENTWARNUNG!!!

    Ich hab jetzt nochmal rumgesucht und rumkopiert. Hab' die Funktionen die das Bild geladen und das Histogramm berechnet haben einfach mal in die Main-Methode kopiert. Und schon geht alles...

    Hat dafür jemand eine erklärung ?



  • seldon schrieb:

    faithless schrieb:

    Und free klappt auch irgendwie nicht.
    Der Befehl free(h_img); bringt diesen Fehler: expression preceding parentheses of apparent call must have (pointer-to-) function type

    Das liegt daran, dass du einen unsigned int free; definiert hast, der die Funktion free verdeckt. Du solltest ihn umbenennen.

    Sehr geil!! Danke 🙂


Anmelden zum Antworten