Dynamisches Array mit Pointer auf Array
-
Hi, hab das Problem, dass ich die Fehlermeldung
assignment from incompatible pointer type bekomme, wenn ich *zahlen mit float initialisiere. Bin mir auch sonst nicht wirklich sicher, ob das Programm auch genau das macht, was es soll, zB beim Speicherort.[cpp]
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>int feldini(int anzahl, int *ptr);
int main(int argc, char *argv[])
{int i, anzahl;
float *zahlen;
printf("Geben Sie die gewuenschte Groesse des Feldes ein: ");
scanf("%d", & anzahl);
int *ptr;
int pos;feldini(anzahl, ptr);
pos= *ptr;
for (i=0; i<anzahl; i++) {
printf("Geben Sie die %d. Zahl ein: ", i+1);
scanf("%f", &(zahlen[i])); }printf("zahl 3 = %f\n", zahlen[2]);
printf("Speicherort= %d\n", pos);free(zahlen);
getchar();
getchar();return 0;
}
int feldini (int anzahl, int *ptr) {
float *zahlen;zahlen = malloc(anzahl * sizeof(int));
ptr= zahlen;
printf("vor memset: %d\n", zahlen[2]);
memset(zahlen, 0, 1000);
printf("nach memset= %d\n", zahlen[2]);return *ptr;
}
[code]Außerdem habe ich keine Möglichkeit gefunden memset mit der unbestimmten Arraygröße zu benutzen, darum steht da im Moment nur 1000.
Wär echt nett wenn mir jemand helfen könnte
-
Hallo,
du mußt deiner Variable zahlen eine Adresse übergeben, bevor du Zahlen da reinschreibst. Deine Funktion feldini könnte dann so aussehen:float* feldini(unsigned anzahl) { float* ptr = malloc(anzahl*sizeof(float)); // oder besser: malloc(anzahl*sizeof(*ptr)); if ( ptr != NULL ) memset(ptr,0, anzahl*sizeof(*ptr)); return ptr; } int main() { float *zahlen; unsigned anzahl = 3; zahlen = feldini(anzahl); if ( zahlen != NULL ) //... }
Statt malloc und memset kannst du für die Speicherreservierung calloc benutzen.
-
Dankeschön
Das hat mir den Abend gerettet!
scheint einwandfrei zu laufen...