[gelöst] Warnung: Zuweisung von inkompatiblem Zeigertyp
-
_matze schrieb:
Wutz schrieb:
Du weist einem float* ein float** zu.
Woran machst du das fest? Wir sehen hier leider keine Deklarationen.
Das sieht man an der obigen Typkonvertierung, welche offenbar fehlerfrei durchführbar ist, da er keinen Fehler aufführte.
-
Danke! Hier noch die Deklaration von data_output/data_input und data:
float *data_input, *data_output; struct fann_train_data *data = (struct fann_train_data *) malloc(sizeof(struct fann_train_data));
Und so sieht es in der Struktur aus:
struct fann_train_data { //... fann_type **input; fann_type **output; };
Der Datentyp fann_type ist hier ein float.
-
Vielleicht will der Compiler einfach nur fann_type statt float...
-
Soweit ich weiß, liefert calloc einen Zeiger und nicht einen Zeiger auf einen Zeiger. Also einfach den Cast von (Float**) zu (float*) ändern und alles ist toll. Dann passt auch mit dem Type von input.
-
calloc liefert alles was Du haben willst, es allokiert ja nur einen Speicherberreich. Wenn Du einen Speicherbereich für einen Zeiger allokierst, erhältst Du einen Zeiger auf einen "Zeigerspeicher".
-
Heimelchen schrieb:
Soweit ich weiß, liefert calloc einen Zeiger und nicht einen Zeiger auf einen Zeiger. Also einfach den Cast von (Float**) zu (float*) ändern und alles ist toll. Dann passt auch mit dem Type von input.
Das bringt genau die gleiche Warnung.
data->input = (float *) calloc(num_data, sizeof(float *));
RR schrieb:
calloc liefert alles was Du haben willst, es allokiert ja nur einen Speicherberreich. Wenn Du einen Speicherbereich für einen Zeiger allokierst, erhältst Du einen Zeiger auf einen "Zeigerspeicher".
Das würde doch heißen, dass ich die Warnung ignorieren kann und alles ist okay?
-
Wernungen kannst Du natürlich immer ignorieren...propier doch mal:
data->input = (fann_type**) calloc(num_data, sizeof(fann_type*));
-
Die Warnung könnte auch daran liegen, dass data->input ein FanType-Pointer ist und nicht ein float-Pointer, wie der Rückgabewert von calloc gecastet wird.
-
Danke. Jetzt sind die Warnungen weg. Es lag tatsächlich an dem Mix aus fann_type und float.
RR schrieb:
Wernungen kannst Du natürlich immer ignorieren...
Ja, ich wollte nur sichergehen, dass ich keinen wildgewordenen Zeiger in meinem Programm habe...
-
Diese Haltung ist löblich...ich wollte auch nicht sagen, dass man generell Warnungen ignoriern sollte.