Olen porttaamassa V4L2 Mach64 ajuria 2.6.37 kernelille. Koodissa alustetaan kortti funktiolla struct video_device *vbi_init
. Funktiota kutsutaan koodissa näin:
card->video_dev = vbi_init(card, &generic_video_tempelate, "video");
Kyseinen rivi tuottaa virheen:
incompatible types when assigning to type 'struct video_device' from type 'struct *video_device'
Ajuri on osoitteesta http://www.rulerofearth.com/
Vaikuttaa siltä, että card->video_dev ei ole osoitin, kun vbi_init palauttaa sellaisen.
Olisiko mitään keino saada tuohon struct video_device:iin tuon palautetun structin dataa?
Näinkö siis? :)
card->video_dev = *vbi_init(card, &generic_video_tempelate, "video");
Tee video_dev:stä osoitin. Tai sitten (en ole kyllä kokeillut) mutta seuraava voisi toimiakin
card->video_dev = *vbi_init(card, &generic_video_tempelate, "video");
Koska tähti osoittimen edessä tekee viittauksen osoittimen osoittaman osoitteen sisältämään arvoon.
Edit. User137 näköjään ehtikin ensin :D
Tosin tuossa on semmoinen riski, että jos vbi_init palauttaakin joskus jostain syystä NULL:n niin tuloksena on linuxissa "Muistialueen ylitys" ja wintoosassa "Ohjelma lakkasi toimimasta".
Täytyykin koittaa. Kone vain on mökillä.
En jaksa perehtyä koodiin, mutta jos funktio palauttaa osoittimen, pitää lähtökohtaisesti ottaa osoitin talteen ja myöhemmin vapauttaa muisti asianmukaisesti, jottei tule muistivuotoa tai jopa toimintavirhettä.
Koitin tuota neuvoa ja se toimi. Kiitos!
Komppaan nyt edellistä viestiäni
vesikuusi kirjoitti:
Tosin tuossa on semmoinen riski, että jos vbi_init palauttaakin joskus jostain syystä NULL:n niin tuloksena on linuxissa "Muistialueen ylitys" ja wintoosassa "Ohjelma lakkasi toimimasta".
Ja
Metabolix kirjoitti:
--jos funktio palauttaa osoittimen, pitää lähtökohtaisesti ottaa osoitin talteen ja myöhemmin vapauttaa muisti asianmukaisesti, jottei tule muistivuotoa tai jopa toimintavirhettä.
Koska jos funktio palauttaa osoittimen, siihen on luultavasti jokin syy.
Lisäys: T. Vesikuusi :D (Mod. korjasi. ;D)
Aihe on jo aika vanha, joten et voi enää vastata siihen.