[gelöst] Warnung: Zuweisung von inkompatiblem Zeigertyp



  • Wutz schrieb:

    Du weist einem float* ein float** zu.

    Woran machst du das fest? Wir sehen hier leider keine Deklarationen.



  • _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. 🙄


Anmelden zum Antworten