C Array erstellen und weiterverarbeiten

KillerPinockel

Lieutenant
Registriert
Jan. 2009
Beiträge
632
Hallo,

ich habe nur eine kurze Frage, wie ich ein Array weiterverarbeiten kann.

Hintergrund:

Ich habe ein Programm geschrieben, was aus 5 Funktionen besteht. Jede Funktion hat eine eine seperate *.c und *.c Datei. Also bspw. fkt1.c und fkt1.h.
Es ist alles korrekt eingebunden und der Code funktioniert auch soweit.

Nun wollte ich eine Änderung einbauen, da ich in fkt 1-3 jeweils Dateien lese und dann wieder schreibe. Also Ablauf:

FKT1
- Datei lesen
- berechnen
- in Datei schreiben

FKT2
- Datei lesen
- berechnen
- in Datei schreiben

FKT3
- Datei lesen
- berechnen
- in Datei schreiben

FKT4
-Datei FKT1 öffnen / lesen
-Datei FKT2 öffnen / lesen
-Datei FKT3 öffnen / lesen
-berechnen
-Ergebnis in neue Datei schreiben

Ihr seht eine Menge i/o Operationen. Nun wollte ich das gern etwas ein kürzen und in FKT 1-3 jeweils ein Array erstellen, dort die Ergebnisse reinschreiben und zurück an die main geben. Dann FKT4 die 3 Arrays übergeben und dort berechnen lassen und einmal schreiben. Somit müsste ich nur 3 Datei lesen und 1 schreiben, was etwas schneller sein sollte, als mein alter Code.
Leider erschließt mir sich die Übergabe nicht so 100%. Ich habe es so versucht

Code:
int main()
{
unsigned short *data;
data = (unsigned short*) calloc(9 * 48, sizeof(unsigned short));
data = new_data();
}

Code:
unsigned short new_data()
{
unsigned short *data;
data = (unsigned short*) calloc(9 * 96, sizeof(unsigned short));
...

return data;
}

Habt ihr ne Idee? Danke schon mal!
 
Du musst in main() nicht noch Speicher für data allokieren, weil new_data() das schon erledigt. So, wie es jetzt aussieht, wird der Speicher, den du in Zeile 4 belegst, nie benutzt, weil der Zeiger darauf gleich in der nächsten Zeile überschrieben wird durch den Rückgabewert von new_data(). (Immer schön zwischen Daten und Zeigern auf Daten unterscheiden!)
 
Der Code, den du gepostet hast, sollte so funktionieren, ja.
 
und wie greife ich dann in der main() drauf zu?

Hab es so versucht, aber da stirbt mir das Programm.
Code:
for (i = 0; i < 50; i++)
printf("%d. Wert: %d \n",i, data[i]);
 
Bist du sicher, daß das von new_data() zurückgegebene Array auch tatsächlich mindestens 50 Einträge hat? Laut deinem Code oben ist das zwar gegeben, aber vielleicht hast du das zwischenzeitlich geändert?

EDIT: Ansonsten, Programm im Debugger ausführen. Der schubst dich im günstigsten Fall mit der Nase direkt auf den Fehler und gibt dir sonst zumindest einen Ansatz zur Problemsuche.
 
Zuletzt bearbeitet:
Mir wäre auch egal, wenn ich ein globales Array habe und ohne Übergabe arbeite. Ist zwar nicht so super, aber geht.

Das Array ist nicht immer fixiert. Für meine Testdaten ist es ein Array, welches 432*500 Felder haben muss. Es kann aber auch größer, kleiner sein. Darum dachte ich daran mit calloc zu arbeiten und es dynamisch zu deklarieren.
 
KillerPinockel schrieb:
Mir wäre auch egal, wenn ich ein globales Array habe und ohne Übergabe arbeite. Ist zwar nicht so super, aber geht.

Ganz schlechte Idee. Mit globalen Variablen am besten gar nicht erst anfangen.

KillerPinockel schrieb:
Das Array ist nicht immer fixiert. Für meine Testdaten ist es ein Array, welches 432*500 Felder haben muss. Es kann aber auch größer, kleiner sein. Darum dachte ich daran mit calloc zu arbeiten und es dynamisch zu deklarieren.

Ist ja auch nicht verkehrt, aber irgend wo hast du halt einen Fehler gemacht. Ich würde dir nach wie vor empfehlen, das Programm im Debugger zu laden. Wenn du ernsthaft programmieren willst, wirst du auf lange Sicht eh nicht drumhinkommen, dich mit dem Debugger vertraut zu machen.
 
Zurück
Oben