IltisvdT Geschrieben 26. Dezember 2010 Geschrieben 26. Dezember 2010 Hallo, ersteinmal schöne Restweihnachten. wir haben folgende Aufgabe gekriegt: Schreiben Sie eine Funktion, die ein Feld mit double-Werten initialisieren soll. Dazu sollen die Größe des gewünschten Feldes und ein Pointer übergeben werden. Prototyp: void allocMem(int length, void **ptrptr); Die Funktion soll per malloc Speicher anfordern, und den Pointer auf den Speicherbereich auf die uebergebene Variable korrekt speichern. Anschließend soll das Feld per memset (informieren Sie sich per man–Page über den Befehl) mit Nullen initialisiert werden. Schreiben Sie ein Hauptprogramm, welches die Funktion aufruft (mit einer vom Benutzer eingegebenen Länge) und das Feld mit Benutzereingaben füllt. Am Ende des Hauptprogramms soll natürlich der Speicher wieder freigegeben werden. Bisher sieht unser Programm so aus: #include <stdio.h> #include <stdlib.h> #include <string.h> void allocMem (int length, void **ptrptr, int f) { double *feld[length]; feld=(double *) malloc(length); memset(*feld, 0 ,length); feld[f]=**ptrptr; } void eingabe (int i, int *wert) { int a; printf("%d. Zahl eingeben", i); scanf("%d", &a); *wert=a; } int main() { int i=1,groesse,*zahl; printf("Geben Sie die gewuenschte Groeße ein"); scanf("%d", &groesse); while(i<groesse) { allocMem(groesse , eingabe(i, &*zahl),i); i++; } return(0); } Zum einen spuckt er einige Fehler beim kompilieren aus. In der main funktioniert die Übergabe an die allocMem nicht so, wie sie sollte. Er klagt über Probleme, dass er double * übergibt usw...Außerdem steht ja in der Aufgabe dieser Prototyp und da wird ja der Zähler nicht übergeben. meint ihr es ist schlimm, wenn man deren Prototyp ändert? Vielen Dank schonmal Zitieren
Klotzkopp Geschrieben 26. Dezember 2010 Geschrieben 26. Dezember 2010 Ich glaube, du hast nicht verstanden, wie allocMem funktionieren soll. Die Funktion soll Speicher reservieren, initialisieren und den Zeiger auf den reservierten Speicher über den Parameter ptrptr rausgeben. Ein Array von Zeigern brauchst du dafür nicht, denn der einzige Zeiger, der in der Funktion benötigt wird, kommt als Parameter rein. Auch brauchst du weder eine Eingabe-Funktion noch eine Schleife, die sie aufruft. Davon steht nichts in der Aufgabe. In einem älteren Thread hatte ich dir schon einmal geraten, deine Variablen zu initialisieren. Hier reichst du mit zahl wieder einen uninitialisierten Zeiger durch die Gegend. Zitieren
lilith2k3 Geschrieben 26. Dezember 2010 Geschrieben 26. Dezember 2010 Vielleicht wäre es hilfreich, wenn wir hier Schritt für Schritt vorgehen und die Aufgabe auf einfache Tasks reduzieren, die Du dann auch wirklich lösen kannst;) Prototyp: void allocMem(int length, void **ptrptr); Die Funktion soll per malloc Speicher anfordern, und den Pointer auf den Speicherbereich auf die uebergebene Variable korrekt speichern Das heißt, wir haben einen Funktionsprototypen vorgegeben bekommen, der so wie es oben steht lautet (und nicht anders). Desweiteren haben wir die Anforderung, Speicher anzufordern. Das sollte als Ausgangspunkt erst einmal genügen. Frage: Wie alloziert man unter C einen zusammenhängenden Speicherblock variabler Größe? Zitieren
carstenj Geschrieben 27. Dezember 2010 Geschrieben 27. Dezember 2010 Hi, nur mal so nebenbei: Sind das Aufgaben für ein Studium oder eine Ausbildung o.ä.? Zitieren
i_pünktchen Geschrieben 27. Dezember 2010 Geschrieben 27. Dezember 2010 Hey, vielleicht solltest du dein Programm erst auf die minimale Aufgabenstellung beschränken. Hier ist die Mainmethode so wie ich verstanden habe, dass du deine Aufgabe lösen sollst. Damit sollte der Aufruf der Funktion allocMem(int length, void **ptrptr); funktionieren. (Nicht getestet) In der Methode musst du dan nur noch deinen malloc ausführen. int main(){ int groesse=0; double *feld; printf("Geben Sie die gewuenschte Groeße ein"); scanf("%d", &groesse); allocMem(groesse, &feld); for(int i=0;i<groesse;i++){ feld=NULL; } delete feld; } Zitieren
Klotzkopp Geschrieben 27. Dezember 2010 Geschrieben 27. Dezember 2010 Malloc und delete ist aber keine gute Mischung. Zitieren
royale Geschrieben 5. Januar 2011 Geschrieben 5. Januar 2011 Hi, nur mal so nebenbei: Sind das Aufgaben für ein Studium oder eine Ausbildung o.ä.? Universität schätze ich, iwas mit Grundlagen bestimmt^^ Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.