Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 7 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Linked list -  insert

Registrovaný: 09.04.11
Prihlásený: 11.01.14
Príspevky: 257
Témy: 26
Bydlisko: Kesa
Príspevok NapísalOffline : 24.05.2012 21:21

Program mi funguje, mám len takú menšiu otázku. Vytvorím si pomocnú dynamickú štruktúru (vlastne sú dve). Z jednej spravím kópiu hlavnej a do druhej uložím nový prvok. Keď si všetko vložím a pospájam (a nedám delete help), tak vo first mám všetky hodnoty + tú novú, čo je v poriadku. Ale ako náhle dám delete help, tak sa mi zmaže ten pridaný prvok a aj to, čo je naňho napojé. Myslel som si, že kedže mám kópiu firstu, tak aj keď vymažem to help, tak mi zostanú tie prvky vo firste.
Takže otázka je taká, či sa to dá nejak z efektívniť, aby som tú nepotrebnú pamäť mohol odstrániť.

Kód:
struct Item* insert(struct Item* first, struct Item* Where, int data)
{
   Item* temp = first; //vytvori v pamati miesto pre pomocnu strukturu a vlozi do nej first
   Item* help = new Item; //vytvori v pamati miesto pre novy prvok

   if(Where == NULL) //ked funckia find nenasla prvok, vratime NULL
      return first;

   while(temp != Where) //posuvame sa po najdeny prvok
      temp = temp->next;

   help->data = data; //do pomocneho prvku vlozime hodnotu
   help->next = temp->next; //ako dalsi prvok k tej hodnote napojime prvky kde sme predtym skoncili
   temp->next = help; //nakoniec k pomocnemu zoznamu doplnime postupnost

   return first;
}







_________________
NB - HP Pavilion DV7 3190 -- Windows® 7 Home Premium 64-bit -- Intel® Core™ i7-720QM 1,6 GHz az 2,8 Ghz Turbo Boost, 6 MB pamäte cache úrovne 2 -- 4 GB DDR3 -- disk 640 GB SATA 5400 ot/min -- rozlíšenie 1600 x 900 -- NVIDIA® GeForce® GT 230M -- 2 815 MB grafickej pamäte s vyhradenou pamäťou 1 GB DDR3 -- pripojenie 802.11 a/b/g/n
Offline

Skúsený užívateľ
Skúsený užívateľ
Linked list -  insert

Registrovaný: 11.01.09
Prihlásený: 25.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 24.05.2012 21:27

street_punk píše:
Takže otázka je taká, či sa to dá nejak z efektívniť, aby som tú nepotrebnú pamäť mohol odstrániť.

Ale ved ona nie je nepotrebna, je predsa sucastou zoznamu, tak ako aj ostatne prvky. Tie si taktiez niekde predym alokoval rovnakym sposobom. Zmazat to mozes kedykolvek neskor, ak tuto bunku uz potrebovat nebudes, pripadne pri mazani celeho zoznamu.


Offline

Užívateľ
Užívateľ
Linked list -  insert

Registrovaný: 09.04.11
Prihlásený: 11.01.14
Príspevky: 257
Témy: 26
Bydlisko: Kesa
Príspevok Napísal autor témyOffline : 24.05.2012 21:48

Ja to chápem tak, že tá pamäť mi poslúžila nato, aby som si do nej uložil ten nový prvok. A naňho som napojil zvyšok tempu. Temp je vlastne kópia firstu, takže je to zhodne. Help nie je ničoho kópia, takže keď ho odstranim, nemalo by sa nič stať, kedže je to už všetko uložene vo firste. Lenže keď tam dám to delete help, tak sa mi z firstu zmaže práve tá časť help a to čo je na ňu napojené. A práve to nechápem, kedže stým first nemá nič spoločné.







_________________
NB - HP Pavilion DV7 3190 -- Windows® 7 Home Premium 64-bit -- Intel® Core™ i7-720QM 1,6 GHz az 2,8 Ghz Turbo Boost, 6 MB pamäte cache úrovne 2 -- 4 GB DDR3 -- disk 640 GB SATA 5400 ot/min -- rozlíšenie 1600 x 900 -- NVIDIA® GeForce® GT 230M -- 2 815 MB grafickej pamäte s vyhradenou pamäťou 1 GB DDR3 -- pripojenie 802.11 a/b/g/n
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 24.05.2012 21:59

To, čo je na help napojené sa ti v skutočnosti nezmaže, len prídeš o prístup k ten pamäti = memory leak. (ak nemáš definovaný rekurzívny deštruktor)

Kadopádne, chápeš to celé úplne zle. temp nie je kópia first, temp je len nový ukazateľ, ktorý ukazuje na rovnakú pamäť ako first (aj first je len ukazateľ)
Ďalej help, ty operátorom new povieš: "Ja chcem pamäť a chcem jej toľkoto!" (toľkoto = sizeof(štruktúra)) a tú pamäť aj dostaneš a ako bonus dostaneš aj ukazateľ na jej začiatok, aby si k nej vedel pristupovať. No a keď si ju zmažeš, tak si ju holt zmažeš, tvoja smola :P

Prečítaj si niečo o organizovaní pamäte. Ktoré premenné sa kde ukladajú (heap/stack/data sector) a hlavne si ešte raz prejdi kapitolu o ukazateľoch a dynamickej alokácií pamäte :)


Offline

Skúsený užívateľ
Skúsený užívateľ
Linked list -  insert

Registrovaný: 11.01.09
Prihlásený: 25.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 24.05.2012 22:04

Pokusim sa ti to vysvetlit, len dufam, ze sa do toho este viac nezamotas.

street_punk píše:
Temp je vlastne kópia firstu, takže je to zhodne

Nie tak celkom. Smernik je iba premenna, ktora nesie adresu. Temp nesie tu istu adresu, aku first. Ak nieco zapises na *temp, prejavi sa to aj na *first. Cize neda sa povedat, ze je to kopia

street_punk píše:
Help nie je ničoho kópia, takže keď ho odstranim, nemalo by sa nič stať, kedže je to už všetko uložene vo firste

Vo firste nemoze byt nic ulozene, nakolko first je stale iba smernik - smernik na prvu polozku zoznamu. Musis si uvedomit, ze cely zoznam je iba zhluk alokovanych casti pamate, ktore navzajom jedna na druhu ukazuju a tym padom sa da prechadzat cez jednotlive polozky pomocou smernikov.

V tomto clanku som popisal, ako funguju smerniky. Z tem, ktore si tu uz zalozil, usudzujem, ze ty nemas problemy so smernikmi, len v tomto konkretnom pripade si zrejme nevies dat do suvisu, ako su navzajom previazane. Prezri si v tom clanku aspon obrazky, mozno ti to trocha pomoze. V skratke: zoznam je zlozeny z jednotlivych kuskov, ktore su dynamicky alokovane. Preto nemozes ak alokujes pamat ( hoc jej das nazov temp, je to iba kus pamate ) a priradis ju niekde do tvojho zoznamu, tuto pamat zmazat, lebo prerusis tym samotny zoznam.


Offline

Užívateľ
Užívateľ
Linked list -  insert

Registrovaný: 09.04.11
Prihlásený: 11.01.14
Príspevky: 257
Témy: 26
Bydlisko: Kesa
Príspevok Napísal autor témyOffline : 25.05.2012 10:11

hej, ja v celku chápem tým smerníkom, len to neviem moc popísať, píšem to po svojom. Vedel som že, temp mi nevytvorí nejakú novú pamäť a z kopíruje mi do ten všetky údaje z hlavnej pamäte. to by som musel použiť new aby sa tak stalo. Vedel som, že robím s tou istou pamäťou len pod inými "menami" .
A teraz keď som si to tak prešiel v hlave, už viem prečo nemôžem vymazať help.
Kód:
 temp->next = help; //nakoniec k pomocnemu zoznamu doplnime postupnost

Práve v tomto riadku sa mi napájama help a kedže teraz help nie je nič iný, ako jedno z mien pre tú pamäť, a ja ho odstránim, tak stratím prístup k tej pamäti s hocijakým iným menom.
P.s: Keď to aj tak nie je napísané správne, tak to nechajte tak, ja to chápem, len to neviem dobre popísať :D

Ten článok je vynikajúci. Všimol som si, že plánuješ napísať podobný článok aj o dvojrozmerných poliach. Ten by som aj ja uvítal, s dvojrozmernými poliami som sa nejak moc nezaoberal.







_________________
NB - HP Pavilion DV7 3190 -- Windows® 7 Home Premium 64-bit -- Intel® Core™ i7-720QM 1,6 GHz az 2,8 Ghz Turbo Boost, 6 MB pamäte cache úrovne 2 -- 4 GB DDR3 -- disk 640 GB SATA 5400 ot/min -- rozlíšenie 1600 x 900 -- NVIDIA® GeForce® GT 230M -- 2 815 MB grafickej pamäte s vyhradenou pamäťou 1 GB DDR3 -- pripojenie 802.11 a/b/g/n
Offline

Skúsený užívateľ
Skúsený užívateľ
Linked list -  insert

Registrovaný: 11.01.09
Prihlásený: 25.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 25.05.2012 10:18

street_punk píše:
Práve v tomto riadku sa mi napájama help a kedže teraz help nie je nič iný, ako jedno z mien pre tú pamäť, a ja ho odstránim, tak stratím prístup k tej pamäti s hocijakým iným menom.

Presne tak, teraz tomu chapes spravne :) A ano, niekedy zaciatkom juna dufam pribudne aj druhy clanok, vdaka za pochvalu.


Odpovedať na tému [ Príspevkov: 7 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. mnohonásobný insert

v PHP, ASP

2

456

26.04.2010 2:39

Feko Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Insert ID

v Databázy

4

698

21.06.2009 11:26

neopagan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. INSERT INTO

v PHP, ASP

15

1139

01.06.2009 17:15

Draex Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Veľky insert - problem

v Databázy

8

708

06.05.2009 14:54

Hue Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. SQL INSERT INTO SELECT

v Databázy

1

472

18.10.2015 15:48

BX Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. TinyMCE Insert Link - otazka

v Ostatné

1

507

09.06.2010 14:24

Revolution Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Insert correct SIM card

v Mobilné zariadenia

4

1037

15.12.2009 21:45

dom34 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vynechanie tabulky pri INSERT INTO

v PHP, ASP

5

538

02.03.2008 21:56

max-m Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. [SQL] Oracle - vnoreny INSERT vo Fukcii

v Databázy

15

1194

13.05.2010 13:04

coldak Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. crawler list

v Internetový marketing, SEO, reklama

3

772

07.09.2010 20:18

shaggy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Záručný list

v Obchody, reklamácie a právo

1

1578

13.07.2017 16:09

michalesku Zobrazenie posledných príspevkov

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie. Crawler list

v Internetový marketing, SEO, reklama

2

81511

12.05.2007 2:46

JanoF Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. TODO LIST

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Správy pre vedenie fóra

34

4327

16.06.2006 0:18

JanoF Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. White List!

v Počítačové hry

7

760

08.03.2012 17:56

MAFI5 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Kontakt list

v PHP, ASP

8

1011

05.07.2008 10:13

Mysql_dodo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. support ticket list

v Ostatné programy

2

421

08.08.2013 20:25

elo Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra