Hallo,
ich habe ein struct welches ein float Array flexibler länge beinhalten
soll. Dieses struct möchte ich anschließend mit Werten befüllen.
Kann mir jemand sagen, was ich falsch mache? Das float-Array wird
offensichtlich nicht korrekt mit Werten initialisiert.
Thomas W. schrieb:> Du übergibst s1 gleichzeitig während du es erzeugst ? Das macht doch> keinen Sinn, oder ?
Ich initialisiere die Variable, allokiere Speicherplatz in dieser
Funktion und gebe einen Zeiger darauf zurück. Spricht für mich nichts
dagegen. Die ganze Struktur habe ich mir übrigens nicht ausgedacht,
sondern von hier adaptiert (nur eben mit float anstatt strings)
https://www.geeksforgeeks.org/flexible-array-members-structure-c/
mh schrieb:> Überleg dir mal genau was der Typ von vals ist.
Oh Mann -- tausend dank ;)
Muss natürlich float und nicht char heißen -> es funktioniert wie
gewünscht.
Danke
Peter
Den Pointer auf "struct data" zu übergeben ist hier ohne Wirkung.
Auf folgende Art hast Du wesentlich sinnvolleren Code und man überlegt
nicht erst, was Du machen wolltest ;)
1
structdata*createData(intid,inta_size,floata[]){
2
structdata*s,
3
s=malloc(sizeof(*s)+sizeof(float)*a_size);
4
...
5
returns;
6
}
7
...
8
intmain(void){
9
floatA[]={1.0,7.5,9.3};
10
structdata*s1=createData(523,3,A);
11
...
12
return0;
13
}
Du hast praktisch einen Übergabeparameter als Stackvariable missbraucht
;) sollte man nicht tun.
Gruß Holger
Peter L schrieb:> Das float-Array wird
welches float-Array?
Test schrieb:> Ich initialisiere die Variable, allokiere Speicherplatz in dieser> Funktion und gebe einen Zeiger darauf zurück. Spricht für mich nichts> dagegen.
Warum dann aber als Parameter der Funktion und nicht lokal in der
Funktion?