array of struct mit malloc erstellen in C

Stromschlumpf

Cadet 1st Year
Registriert
Juni 2017
Beiträge
13
Hi, hab eine Hausaufgabe zu erstellen in der ein array Strukturen mit 3 Daten speichert. Die Größe des Array soll per Eingabe bestimmt und mit malloc gesetzt werden. Mein Problem ist, dass mein Array immer die Größe 4 hat, egal was ich eingebe ... kann mir jemand sagen wo der Fehler ist?

#include <stdio.h>
#include <stdlib.h>

struct exam
{
float mark;
int exId,maNum;
};

int main()
{
int n,i;
struct exam *marks;

printf("how many files shell be stored? ");
scanf("%d",&n);

marks =malloc(n * sizeof(int));

if(n <= 0)
{
printf("\nYou do not want to enter any data.");
return 0;
}
printf("\nsize of array: %d",n);
printf("\nsize of array: %d",sizeof(marks)); //gibt immer 4 an

/*for(i = 0; i < n; i++)
{
printf("\nEnter the %d files data.",i+1);
printf("\nMark: ");
scanf("%f",&marks.mark);
printf("\nExam ID: ");
scanf("%d",&marks.exId);
printf("\nMatriculation number: ");
scanf("%d",&marks.maNum);
}*/

return 0;
}
 
Weil
Code:
exam
ein Pointer ist und der auf deinem Computer 4 Byte lang ist.

btw:
Code:
marks =malloc(n * sizeof(struct exam));
sollte den Fehler beheben.
 
Ich habe länger kein C mehr geschrieben, aber zwei Anmerkungen:

sizeof(marks) gibt wahrscheinlich die Größe des Pointers an. Und auf deinem System sind Pointer wohl 4 Byte lang.
marks =malloc(n * sizeof(int)); alloziert für Speicher der Größe n * (Größe eines int). Willst du nicht eigentlich n * sizeof(exam) machen?

Und benutz mal Code-Tags. Oben im Editierfenster die Raute.
 
ah ok danke, werds gleich mal ausprobieren ... dachte sizeof gibt die länge des Array wieder.
 
marks ist aber nichts anderes als ein pointer, wie soll der compiler denn wissen, dass du auf ein 'array' zeigst?
 
Zuletzt bearbeitet:
Zurück
Oben