Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Ongelmia osoittimien kanssa

Sivun loppuun

reino [29.04.2012 12:36:29]

#

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/

vesikuusi [29.04.2012 13:42:07]

#

Vaikuttaa siltä, että card->video_dev ei ole osoitin, kun vbi_init palauttaa sellaisen.

reino [29.04.2012 13:53:26]

#

Olisiko mitään keino saada tuohon struct video_device:iin tuon palautetun structin dataa?

User137 [29.04.2012 15:30:47]

#

Näinkö siis? :)

card->video_dev = *vbi_init(card, &generic_video_tempelate, "video");

vesikuusi [29.04.2012 15:31:22]

#

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".

reino [29.04.2012 19:48:39]

#

Täytyykin koittaa. Kone vain on mökillä.

Metabolix [29.04.2012 20:00:10]

#

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ä.

reino [05.05.2012 14:34:23]

#

Koitin tuota neuvoa ja se toimi. Kiitos!

vesikuusi [05.05.2012 21:01:10]

#

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)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta