| | |
| Stránka: 1 z 1
| [ Príspevkov: 7 ] | |
Autor | Správa |
---|
Registrovaný: 09.04.11 Prihlásený: 11.01.14 Príspevky: 257 Témy: 26 Bydlisko: Kesa |
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 |
|
Registrovaný: 11.01.09 Prihlásený: 25.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 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.
|
|
Registrovaný: 09.04.11 Prihlásený: 11.01.14 Príspevky: 257 Témy: 26 Bydlisko: Kesa |
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 |
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 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
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
|
|
Registrovaný: 11.01.09 Prihlásený: 25.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 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.
|
|
Registrovaný: 09.04.11 Prihlásený: 11.01.14 Príspevky: 257 Témy: 26 Bydlisko: Kesa |
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ť
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 |
|
Registrovaný: 11.01.09 Prihlásený: 25.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 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.
|
|
| Stránka: 1 z 1
| [ Príspevkov: 7 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| mnohonásobný insert v PHP, ASP | 2 | 456 | 26.04.2010 2:39 Feko | | Insert ID v Databázy | 4 | 698 | 21.06.2009 11:26 neopagan | | INSERT INTO v PHP, ASP | 15 | 1139 | 01.06.2009 17:15 Draex | | Veľky insert - problem v Databázy | 8 | 708 | 06.05.2009 14:54 Hue | | SQL INSERT INTO SELECT v Databázy | 1 | 472 | 18.10.2015 15:48 BX | | TinyMCE Insert Link - otazka v Ostatné | 1 | 507 | 09.06.2010 14:24 Revolution | | Insert correct SIM card v Mobilné zariadenia | 4 | 1037 | 15.12.2009 21:45 dom34 | | vynechanie tabulky pri INSERT INTO v PHP, ASP | 5 | 538 | 02.03.2008 21:56 max-m | | [SQL] Oracle - vnoreny INSERT vo Fukcii v Databázy | 15 | 1194 | 13.05.2010 13:04 coldak | | crawler list v Internetový marketing, SEO, reklama | 3 | 772 | 07.09.2010 20:18 shaggy | | Záručný list v Obchody, reklamácie a právo | 1 | 1578 | 13.07.2017 16:09 michalesku | | Crawler list v Internetový marketing, SEO, reklama | 2 | 81511 | 12.05.2007 2:46 JanoF | | TODO LIST [ Choď na stránku: 1, 2 ] v Správy pre vedenie fóra | 34 | 4327 | 16.06.2006 0:18 JanoF | | White List! v Počítačové hry | 7 | 760 | 08.03.2012 17:56 MAFI5 | | Kontakt list v PHP, ASP | 8 | 1011 | 05.07.2008 10:13 Mysql_dodo | | support ticket list v Ostatné programy | 2 | 421 | 08.08.2013 20:25 elo |
| 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
|
|