Nacitanie spajaneho zoznamu struktur zo subora (C) - help

Programovacie jazyky, rady, poradňa...
Hensym
VIP
VIP
Používateľov profilový obrázok
Príspevky: 6978
Registrovaný: 24 apr 2011, 0:53
Bydlisko: Zvolen

Re: Nacitanie spajaneho zoznamu struktur zo subora (C) - hel

Príspevok od používateľa Hensym »

A čo som na tom vyššie nealokoval?
(A neučia ma nič, učím sa doma :lol: )

//autoeditácia príspevku (04 Máj 2014, 17:08)
Asi posledná vec, ktorá mi nejde, vrámci projektu, je dealokovanie, neviem na to prísť.

Kód: Vybrať všetko

void delstruct(LIB *lib) {
    LIB *p_akt = lib->p_dalsi;
    LIB *p_temp;
    if (p_prv->p_dalsi) {
        while (p_akt) {
            p_temp = p_akt->p_dalsi;
            free(p_akt);
            p_akt = p_temp;
        }
    }
}
Riešim to touto funkciou, no vždy mi spadne program.
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Nacitanie spajaneho zoznamu struktur zo subora (C) - hel

Príspevok od používateľa pcsiete »

Vyzerá mi to dobre, len čo je p_prv? Mimo to, zlé môžu byť aj dáta.

Ak by si chcel vymazať všetko (len neviem ako to presne myslíš s tou prvou položkou):

Kód: Vybrať všetko

void delstruct(LIB** lib) {
	LIB *p_temp, *p_akt = *lib;
	while (p_akt) {
		p_temp = p_akt->p_dalsi;
		free(p_akt);
		p_akt = p_temp;
	}
	
	*lib = NULL;
}
Hensym
VIP
VIP
Používateľov profilový obrázok
Príspevky: 6978
Registrovaný: 24 apr 2011, 0:53
Bydlisko: Zvolen

Re: Nacitanie spajaneho zoznamu struktur zo subora (C) - hel

Príspevok od používateľa Hensym »

S tou prvou som to vlastne nedomyslel. :)

Skúsil som tvoju funkciu, ak ju zavolám na konci mainu, čiže pred ukončením programu, spôsobom:

Kód: Vybrať všetko

if(loaded){
   delstruct(&p_prv);
   free(p_prv);
}
Tak to prebehne v poriadku, no ak tento kod vlozim do samostatnej funkcie "Nacitaj" (kde by sa mal pred opatovnym nacitanim najskor zoznam dealokovat, tak spadne program). Nevies, kde moze byt problem?
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Nacitanie spajaneho zoznamu struktur zo subora (C) - hel

Príspevok od používateľa pcsiete »

... neviem.
Tá funkcia nastavuje *lib na NULL, teda teoreticky by malo free(p_prv) spustiť chybu samo o sebe...
Hensym
VIP
VIP
Používateľov profilový obrázok
Príspevky: 6978
Registrovaný: 24 apr 2011, 0:53
Bydlisko: Zvolen

Re: Nacitanie spajaneho zoznamu struktur zo subora (C) - hel

Príspevok od používateľa Hensym »

Už som našiel chybu, bolo treba tú štruktúru znova alokovať samozrejme, inak program pokračoval a prakticky nemal s čím. Čiže v samotnej funkcii delstruct nikdy chyba nebola, vďaka za pomoc. :)
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Nacitanie spajaneho zoznamu struktur zo subora (C) - hel

Príspevok od používateľa BX »

pcsiete napísal:Tá funkcia nastavuje *lib na NULL, teda teoreticky by malo free(p_prv) spustiť chybu samo o sebe...
free(NULL); nie je chyba, je to len prazdna operacia, nic to neurobi (ale inak je normalne platna)
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Nacitanie spajaneho zoznamu struktur zo subora (C) - hel

Príspevok od používateľa pcsiete »

BX napísal: free(NULL); nie je chyba, je to len prazdna operacia, nic to neurobi (ale inak je normalne platna)
to je pravda. Myslel som predošlé dealokovanie, kedže hensym použil moju funkciu ktorá dealokovala všetko, a potom ešte znova dealokoval prvú položku. Pri debugových kompiláciach sa tak zvyknú schválne vytvárať neplatné pointre.
Napísať odpoveď