Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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.

Geschrieben

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?

Geschrieben

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;

}

  • 2 Wochen später...

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...