Können Rückgabewert und Parameter bei Funktion gleich sein?
-
Tachyon schrieb:
Es ist kein guter Stil, speicher dynamisch in einer Funktion zu allokieren.
... das ist doch Käse.
Ein Programm, das aus mehreren tausend Zeilen ( plus/minus ) Code besteht.
Wohin willst du die Speicherreservierung auslagern wenn nicht in Funktionen, auf den Mond?
-
ach komm... schrieb:
Tachyon schrieb:
Es ist kein guter Stil, speicher dynamisch in einer Funktion zu allokieren.
... das ist doch Käse.
Ein Programm, das aus mehreren tausend Zeilen ( plus/minus ) Code besteht.
Wohin willst du die Speicherreservierung auslagern wenn nicht in Funktionen, auf den Mond?Ja.
Da ist noch viel Platz.
Ne, im Ernst. Bei großen Programmen würde ich mit Handles arbeiten - oder noch besser, es in Strukuturen verpacken - und zu Funktionen die irgendwie Resourcen anfordern auch passende freigabe Funktionen als Gegenstück liefern.
Allerdings ist Deine Aussage etwas aus dem Kontext gerissen, weil ich mich auf das konkrete, einfache Beispiel bezog.
-
Danke für die Antworten. Ihr habt natürlich Recht - es macht wenig Sinn das doppelt zu machen...
Allerdngs muss ich dann nochmal den Zeiger definieren, oder?double* speicher ( int dim ) { double *zeiger; zeiger = ( double * ) malloc ( dim * sizeof ( double ) ); return zeiger; }
Das mit dem memcpy funktioniert gut, das mit der Reihenfolge hatte ich auch schon bemerkt.
Was spricht denn gegen malloc? Wo liegt der große Unterschied zu calloc? Ich muss mehrere Arrays erzeugen, auch mehrdimensionale. Und da erschien es mir einfacher, eine Funktion zu schreiben, die auch gleich errorchecking enthält (hab ich zur Vereinfachung im Bsp weggelassen)...
Leider tritt trotz der besseren Kopiererei immer noch meine Speicherverletzung auf - es muss also doch irgendwas anderes sein. So wie ich es bisher gelöst hatte, muss es auch nicht zwangsläufig zu einem Problem führen, oder?
So oder so vielen Dank!
-
Der Fehler muss an anderer Stelle liegen.
Greifst du auf den Speicherplatz von einem anderen Programm aus zu?
Wohlmöglich, nachdem das allokierende Programm beendet ist?
-
Also, der Ablauf ist grob so:
1. zwei Arrays (A undanlegen
2. externes Programm starten
3. dieses schreibt Werte in das eine Array (A)
4. die Werte von A nach B übertragen
5. das externe Programm beenden
6. B ausgebendie Schritte 3 und 4 können u.U. mehrfach hintereinander ausgeführt werden, je nach Ergebnis von 3 wird 4 ausgeführt oder auch nicht. Der Fehler tritt immer bei 5 (und nicht bei 6) auf. Wenn ich 4 weglasse läuft alles einwandfrei... Ich seh da den Zusammenhang nicht so richtig
-
wie übergibst du die adresse des arrays A an das externe programm?
-
versuch mal ein funktionierendes minimalbeispiel zu programmieren.
-
Über eine Funktion von dessen Funktionenbibliothek:
XPRSgetlpsol ( prob, A, NULL, NULL, NULL );
Das Programm löst ein Optimierungsproblem (prob) und schreibt die Lösungswerte der Variablen in das Array A.
-
ja, dann würde ich auch erstmal ein minimalprogramm schreiben, das nur das beschreiben des arrays macht. an dem von dir geposteten code liegt es in der form jedenfalls nicht.
-
Das Minimalprogramm läuft - was mich nicht grade glücklicher macht
Danke trotzdem für eure Hilfe und die Bestätigung, dass mein Code richtig ist. Ich werde einfach mal den ganzen Rest durchleuchten ächz