IltisvdT Geschrieben 26. Dezember 2010 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 26. Dezember 2010 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lilith2k3 Geschrieben 26. Dezember 2010 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
carstenj Geschrieben 27. Dezember 2010 Teilen Geschrieben 27. Dezember 2010 Hi, nur mal so nebenbei: Sind das Aufgaben für ein Studium oder eine Ausbildung o.ä.? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
i_pünktchen Geschrieben 27. Dezember 2010 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 27. Dezember 2010 Teilen Geschrieben 27. Dezember 2010 Malloc und delete ist aber keine gute Mischung. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
royale Geschrieben 5. Januar 2011 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.