1 00:00:00,000 --> 00:00:03,381 >> [TÓNLIST spila] 2 00:00:03,381 --> 00:00:10,626 3 00:00:10,626 --> 00:00:11,610 >> [Vídeó spilun] 4 00:00:11,610 --> 00:00:13,640 >> -Hann Er að ljúga. 5 00:00:13,640 --> 00:00:14,380 >> -Um hvað? 6 00:00:14,380 --> 00:00:17,182 >> -Ég veit það ekki. 7 00:00:17,182 --> 00:00:19,990 >> -Svo Hvað vitum við? 8 00:00:19,990 --> 00:00:23,145 >> -Það Á 9:15, Ray Santoya var í hraðbanka. 9 00:00:23,145 --> 00:00:23,644 -Já. 10 00:00:23,644 --> 00:00:27,030 Svo spurningin er, hvað var hann að gera á 9:16? 11 00:00:27,030 --> 00:00:29,720 >> -Shooting Á 9 millimetra á eitthvað. 12 00:00:29,720 --> 00:00:31,540 Kannski sá hann leyniskytta. 13 00:00:31,540 --> 00:00:33,412 >> -Eða Var að vinna með honum. 14 00:00:33,412 --> 00:00:34,340 >> -Wait. 15 00:00:34,340 --> 00:00:36,200 Fara aftur eitt. 16 00:00:36,200 --> 00:00:36,975 >> -Hvað sérðu? 17 00:00:36,975 --> 00:00:44,400 18 00:00:44,400 --> 00:00:47,805 >> -Bring Andlit sitt fullur skjár. 19 00:00:47,805 --> 00:00:48,680 >> -His Gleraugu. 20 00:00:48,680 --> 00:00:50,060 >> -Það Er spegilmynd. 21 00:00:50,060 --> 00:01:00,455 22 00:01:00,455 --> 00:01:02,280 >> -Það Er Nuevitas baseball liðið. 23 00:01:02,280 --> 00:01:03,110 Það er merki þeirra. 24 00:01:03,110 --> 00:01:05,820 >> -Og Hann er að tala við hver er þreytandi að jakka. 25 00:01:05,820 --> 00:01:06,670 >> [END spilun] 26 00:01:06,670 --> 00:01:07,628 >> DAVID Malan: Allt í lagi. 27 00:01:07,628 --> 00:01:11,210 Þetta er CS50 og þetta er aðeins meira af [inaudible] sem þú ert 28 00:01:11,210 --> 00:01:12,890 fór að fikta við Heimadæmi fjórir. 29 00:01:12,890 --> 00:01:16,606 Í dag erum við að byrja að líta aðeins meira djúpt á þessum hlutum sem kallast ábendingum, 30 00:01:16,606 --> 00:01:18,480 sem jafnvel þó að það er nokkuð yfirnáttúrulegt efni, 31 00:01:18,480 --> 00:01:20,813 það kemur í ljós að það er að fara að vera með hvaða hætti við 32 00:01:20,813 --> 00:01:24,320 getur byrjað að byggja og samsetningu miklu flóknari forrit. 33 00:01:24,320 --> 00:01:28,150 En við gerðum það á síðasta miðvikudag með því að sumir claymation fyrsta. 34 00:01:28,150 --> 00:01:30,190 Svo þetta, muna, er Binky og við notuðum hann 35 00:01:30,190 --> 00:01:33,148 að taka a líta á forrit sem var í raun ekki að gera neitt áhugavert, 36 00:01:33,148 --> 00:01:34,950 en það gerði sýna nokkur vandamál. 37 00:01:34,950 --> 00:01:38,570 Svo til að byrja í dag, hvers vegna eigum við ekki að ganga hratt í gegnum nokkrar af þessum skrefum, 38 00:01:38,570 --> 00:01:41,920 reyna að distill í skilmálum Human nákvæmlega hvað er að gerast hér 39 00:01:41,920 --> 00:01:45,410 og hvers vegna þetta er slæmt, og þá fara og í raun að byrja að byggja eitthvað 40 00:01:45,410 --> 00:01:46,309 með þessari tækni? 41 00:01:46,309 --> 00:01:48,350 Svo þetta voru fyrstu tvær línur í þessari áætlun 42 00:01:48,350 --> 00:01:51,340 og í skilmálum leikmaður er, hvað eru þessar tvær línur að gera? 43 00:01:51,340 --> 00:01:55,600 Einhver sem er nokkuð þægilegt með hvað er lýst á skjánum? 44 00:01:55,600 --> 00:01:58,340 45 00:01:58,340 --> 00:02:00,120 Hvað eru þessar tvær línur að gera? 46 00:02:00,120 --> 00:02:02,070 Það er ekki allt sem frábrugðin viku eitt, 47 00:02:02,070 --> 00:02:03,611 en það er einhver nýr sérstakt tákn. 48 00:02:03,611 --> 00:02:04,152 Já? 49 00:02:04,152 --> 00:02:05,628 Þangað aftur. 50 00:02:05,628 --> 00:02:07,092 >> Áhorfendur: Lýsa ábendingum? 51 00:02:07,092 --> 00:02:08,050 DAVID Malan: Segðu þetta aftur 52 00:02:08,050 --> 00:02:08,860 Áhorfendur: Lýsa ábendingum? 53 00:02:08,860 --> 00:02:11,776 DAVID Malan: lýsa yfir ábendingum og skulum betrumbæta það svolítið meira. 54 00:02:11,776 --> 00:02:14,050 Áhorfendur: [inaudible] vistfangi x og þá er Y. 55 00:02:14,050 --> 00:02:15,300 DAVID Malan: Og þá takast. 56 00:02:15,300 --> 00:02:18,550 Svo sérstaklega hvað við erum að gera er að við erum að lýsa yfir tvær breytur. 57 00:02:18,550 --> 00:02:21,252 Þessar breytur, þó, eru að fara að vera af gerðinni int stjörnu, sem 58 00:02:21,252 --> 00:02:23,210 nánar tiltekið þeir eru að fara að geyma 59 00:02:23,210 --> 00:02:26,450 veffang int, hver um sig, x og y. 60 00:02:26,450 --> 00:02:27,660 Nú eru allir gildi? 61 00:02:27,660 --> 00:02:32,621 Eru einhverjar raunveruleg heimilisföng í þetta tvær breytur á þessum tímapunkti? 62 00:02:32,621 --> 00:02:33,120 Nei 63 00:02:33,120 --> 00:02:35,030 Það er bara svo-kallað sorp gildi. 64 00:02:35,030 --> 00:02:38,120 Ef þú ert ekki í raun framselja a breyta, hvað var í vinnsluminni 65 00:02:38,120 --> 00:02:42,224 áður er að fara að fylla með núllum og sjálfur bæði af þeim breytum. 66 00:02:42,224 --> 00:02:44,140 En við gerum ekki enn vita hvað þeir eru og það er 67 00:02:44,140 --> 00:02:47,060 að fara að vera lykillinn að hvers vegna Binky missti höfuðið í síðustu viku. 68 00:02:47,060 --> 00:02:49,980 >> Þannig að þetta var claymation holdgun þetta 69 00:02:49,980 --> 00:02:53,580 þar sem þú ert bara tvær breytur, litlu hringlaga stykki af leir, 70 00:02:53,580 --> 00:02:57,330 sem getur geymt breytur, en eins og sem vafið upp örvarnar benda, 71 00:02:57,330 --> 00:03:00,640 þeir eru í raun ekki benda til einhvers staðar þekkt sem slík. 72 00:03:00,640 --> 00:03:03,670 Já síðan fengum við þessa línu, og þetta var nýr í síðustu viku, malloc fyrir minni 73 00:03:03,670 --> 00:03:07,130 úthlutun, sem er bara fínt leið að segja stýrikerfi, Linux 74 00:03:07,130 --> 00:03:09,750 eða Mac OS eða Windows, hey, gefa mér minni, 75 00:03:09,750 --> 00:03:11,780 og það eina sem þú þarft að segja stýrikerfi 76 00:03:11,780 --> 00:03:14,699 er það þegar að spyrja hana fyrir minni. 77 00:03:14,699 --> 00:03:16,990 Það er ekki að fara að kæra hvað þú ert að fara að gera við það, 78 00:03:16,990 --> 00:03:19,786 en þú þarft að segja rekstri kerfi sem með því að malloc. 79 00:03:19,786 --> 00:03:20,286 Já? 80 00:03:20,286 --> 00:03:21,078 >> Áhorfendur: Hversu mikið? 81 00:03:21,078 --> 00:03:21,994 DAVID Malan: Hversu mikið? 82 00:03:21,994 --> 00:03:25,280 Hversu mikið í bætum, og svo, þetta, aftur, tilgerðalegra dæmi, er bara að segja, 83 00:03:25,280 --> 00:03:27,360 gefa mér stærð int. 84 00:03:27,360 --> 00:03:30,550 Nú, stærð int er fjögur bæti eða 32 bita. 85 00:03:30,550 --> 00:03:32,850 Svo er þetta bara leið segja, hey, stýrikerfi, 86 00:03:32,850 --> 00:03:37,290 gefa mér fjögur bæti af minni sem ég get notað til ráðstöfunar minn, 87 00:03:37,290 --> 00:03:40,560 og sérstaklega, hvað þýðir malloc aftur með tilliti 88 00:03:40,560 --> 00:03:41,795 að því klumpur af fjórum bæti? 89 00:03:41,795 --> 00:03:44,110 90 00:03:44,110 --> 00:03:44,860 Áhorfendur: Heimilisfang? 91 00:03:44,860 --> 00:03:45,901 DAVID Malan: The netfang. 92 00:03:45,901 --> 00:03:47,580 The tölu þess klumpur af fjórum bæti. 93 00:03:47,580 --> 00:03:48,190 Nákvæmlega. 94 00:03:48,190 --> 00:03:51,430 Og svo er það það sem er vistað á endanum í x og það er hvers vegna við gerum ekki raunverulega 95 00:03:51,430 --> 00:03:55,240 sama hvað fjölda sem netfang er, hvort sem það er OX1 eða OX2 96 00:03:55,240 --> 00:03:57,110 eða einhver dulinn sextánskur netfang. 97 00:03:57,110 --> 00:03:59,850 Við sama bara á myndrænan sem að breyta x er nú 98 00:03:59,850 --> 00:04:01,630 bendir til þess klumpur af minni. 99 00:04:01,630 --> 00:04:05,570 Svo örin táknar músina, eða Nánar, þá er minni heimilisfang. 100 00:04:05,570 --> 00:04:09,120 En aftur, við gerum ekki venjulega sama hvað þessir raunverulegur tölur eru. 101 00:04:09,120 --> 00:04:11,780 Nú, þessi lína segir hvað í skilmálum leikmaður er? 102 00:04:11,780 --> 00:04:14,330 Star x fær 42 semíkommu. 103 00:04:14,330 --> 00:04:17,390 Hvað þýðir þetta? 104 00:04:17,390 --> 00:04:18,200 Viltu fara? 105 00:04:18,200 --> 00:04:20,102 Ekki klóra ekki háls þinn. 106 00:04:20,102 --> 00:04:22,360 >> Áhorfendur: The póstfang x er á 42. 107 00:04:22,360 --> 00:04:24,300 >> DAVID Malan: The póstfang x er 42. 108 00:04:24,300 --> 00:04:25,190 Ekki alveg. 109 00:04:25,190 --> 00:04:28,485 Svo nálægt, en ekki alveg, vegna þess að það er stjarnan sem er forskeytið þetta x. 110 00:04:28,485 --> 00:04:29,860 Þannig að við þurfum að fínstilla smá. 111 00:04:29,860 --> 00:04:31,032 Já? 112 00:04:31,032 --> 00:04:36,044 >> Áhorfendur: Verðmæti að bendillinn x er bendir til er 42. 113 00:04:36,044 --> 00:04:36,710 DAVID Malan: OK. 114 00:04:36,710 --> 00:04:40,840 Gildið sem bendillinn x er bendir til, við skulum segja, skal vera 42, 115 00:04:40,840 --> 00:04:44,165 eða setja annan hátt, á stjörnuna x segir, fara í hvaða heimilisfang 116 00:04:44,165 --> 00:04:48,340 er í x, hvort sem það er 1 Oxford Street eða 33 Oxford Street 117 00:04:48,340 --> 00:04:51,850 eða OX1 eða ox33, hvað sem tölustafir netfang er, 118 00:04:51,850 --> 00:04:54,380 stjörnu x er dereferencing x. 119 00:04:54,380 --> 00:04:57,297 Svo fara á þetta netfang og þá setja fjölda 42 þar. 120 00:04:57,297 --> 00:04:59,380 Svo sem myndi vera jafngildir leið til að segja það. 121 00:04:59,380 --> 00:05:01,860 Svo er það allt í lagi og þá við myndum tákna mynd 122 00:05:01,860 --> 00:05:05,370 þannig þar sem við höfum bætt við 42 til þess klumpur af fjórum 123 00:05:05,370 --> 00:05:09,370 bæti á the réttur-hönd hlið, en þessi lína var þar sem hlutirnir fóru skakkur 124 00:05:09,370 --> 00:05:11,120 og höfuð Binky er laust burt á þessum tímapunkti, 125 00:05:11,120 --> 00:05:15,290 vegna slæmir hlutir gerast þegar þú dereference sorp gildi 126 00:05:15,290 --> 00:05:18,210 eða þú dereference ógild ábendingum, og ég segi ógild 127 00:05:18,210 --> 00:05:21,020 vegna þess að á þessum tímapunkti í Sagan, sem er inni í y? 128 00:05:21,020 --> 00:05:24,440 Hvað er verðmæti y byggt á undanförnum skrefum? 129 00:05:24,440 --> 00:05:25,360 Já? 130 00:05:25,360 --> 00:05:26,115 Hvað er þetta? 131 00:05:26,115 --> 00:05:26,990 >> Áhorfendur: An netfang. 132 00:05:26,990 --> 00:05:28,460 DAVID Malan: An netfang. 133 00:05:28,460 --> 00:05:31,910 Það ætti að vera heimilisfang en ég hef frumstilla hana? 134 00:05:31,910 --> 00:05:32,800 Þannig að ég hef ekki enn. 135 00:05:32,800 --> 00:05:35,430 Svo hvað er þekkt fyrir að vera þarna? 136 00:05:35,430 --> 00:05:37,590 Það er bara nokkrar sorp gildi. 137 00:05:37,590 --> 00:05:41,500 Það gæti verið eitthvað netfang frá núll til 2 milljarðar ef þú ert með tvær gigs af RAM, 138 00:05:41,500 --> 00:05:44,289 núll til að 4 milljarða ef þú hefur fékk fjóra gígabæta vinnsluminni. 139 00:05:44,289 --> 00:05:46,080 Það er einhver sorp gildi, en vandamálið er 140 00:05:46,080 --> 00:05:48,200 að stýrikerfi, ef það hefur ekki gefið þér 141 00:05:48,200 --> 00:05:51,140 sem klumpur af minni sérstaklega að þú ert að reyna að fara til, 142 00:05:51,140 --> 00:05:54,650 það er almennt að fara að valda hvað við höfum séð sem skiptingu kenna. 143 00:05:54,650 --> 00:05:57,810 Svo í raun, einhver ykkar sem hafa barist á vandamál á skrifstofutíma 144 00:05:57,810 --> 00:06:00,393 eða vandamál sem er meira almennt við að reyna að reikna út 145 00:06:00,393 --> 00:06:02,150 a skiptingu kenna, sem yfirleitt þýðir 146 00:06:02,150 --> 00:06:05,017 þú ert að snerta hluti af minni sem þú ættir ekki að vera. 147 00:06:05,017 --> 00:06:07,350 Þú ert að snerta minni sem stýrikerfi hefur ekki 148 00:06:07,350 --> 00:06:10,450 leyfa þér að snerta, hvort sem það er með því að fara of langt í array þinn 149 00:06:10,450 --> 00:06:12,870 eða að byrja núna hvort það er vegna þess að þú ert að snerta 150 00:06:12,870 --> 00:06:14,780 minni sem bara er einhver sorp gildi. 151 00:06:14,780 --> 00:06:18,230 >> Þannig stjörnu x hér er konar óskilgreindu hegðun. 152 00:06:18,230 --> 00:06:22,030 Þú ættir aldrei að gera það vegna þess skjön eru, the program er bara að fara að hrun, 153 00:06:22,030 --> 00:06:24,050 vegna þess að þú ert að segja, fara á þetta netfang 154 00:06:24,050 --> 00:06:27,000 og þú hefur ekki hugmynd um hvar sem netfang í raun er. 155 00:06:27,000 --> 00:06:30,300 Svo að stýrikerfið er líklegt að fara að hrun program 156 00:06:30,300 --> 00:06:33,840 vegna og örugglega, það er hvað gerðist þarna að Binky. 157 00:06:33,840 --> 00:06:37,210 Svo að lokum, Binky fastur þetta vandamál með þetta. 158 00:06:37,210 --> 00:06:38,909 Svo þessi forrit sjálft var gölluð. 159 00:06:38,909 --> 00:06:41,450 En ef þú svona sækja fram og framkvæma þessa línu í staðinn, 160 00:06:41,450 --> 00:06:45,580 Y jafngildir x þýðir bara hvað netfang er x, einnig setja það í y. 161 00:06:45,580 --> 00:06:48,740 >> Og svo á myndrænan, höfum við fulltrúa þetta með tveimur örvum 162 00:06:48,740 --> 00:06:51,570 frá x og frá y bendir á sama stað. 163 00:06:51,570 --> 00:06:55,760 Svo merkingu, x er jafnt að y vegna þess að báðir þeir 164 00:06:55,760 --> 00:07:00,300 erum að geyma sama heimilisfang, Ergo bendir á 42, 165 00:07:00,300 --> 00:07:04,910 og nú, þegar þú segir stjörnuna Y, fara á heimilisfang í y, 166 00:07:04,910 --> 00:07:06,790 þetta er áhugaverð aukaverkun. 167 00:07:06,790 --> 00:07:10,320 Svo heimilisfang í y er sama og heimilisfang í x. 168 00:07:10,320 --> 00:07:15,060 Þannig að ef þú segir að fara að heimilisfangi í y og breyta gildi til 13, 169 00:07:15,060 --> 00:07:17,140 hverjir aðrir fyrir áhrifum? 170 00:07:17,140 --> 00:07:21,100 X er lið D, svo að segja, ættu að hafa áhrif eins og heilbrigður. 171 00:07:21,100 --> 00:07:24,340 >> Og reyndar, hvernig Nick dró atkvæði í claymation var einmitt það. 172 00:07:24,340 --> 00:07:28,665 Jafnvel þó að við fylgjum músina Y, endaði við upp á sama stað, 173 00:07:28,665 --> 00:07:32,780 og svo ef við vorum að prenta út x eða pointee Y er, 174 00:07:32,780 --> 00:07:35,720 þá myndum við sjá verðmæti 13. 175 00:07:35,720 --> 00:07:37,927 Nú segi ég pointee að vera í samræmi við vídeó. 176 00:07:37,927 --> 00:07:39,760 Forritari, að mínum þekkingu, aldrei 177 00:07:39,760 --> 00:07:42,460 segja orðið pointee, það sem er bent 178 00:07:42,460 --> 00:07:44,650 á, en samkvæmni með the vídeó, átta 179 00:07:44,650 --> 00:07:47,520 það er allt sem var þýddi í þeirri stöðu. 180 00:07:47,520 --> 00:07:54,190 Svo einhverjar spurningar um claymation eða ábendingum eða malloc bara ennþá? 181 00:07:54,190 --> 00:07:54,850 Nei? 182 00:07:54,850 --> 00:07:55,470 Allt í lagi. 183 00:07:55,470 --> 00:07:58,560 >> Svo án frekari ado, við skulum taka a líta 184 00:07:58,560 --> 00:08:00,700 á þar sem þessi hefur í raun verið notað í nokkurn tíma. 185 00:08:00,700 --> 00:08:03,580 Þannig að við höfum haft þetta CS50 bókasafn sem fékk allar þessar aðgerðir. 186 00:08:03,580 --> 00:08:06,810 Við höfum notað GetInt mikið, GetString, sennilega GetLongLong fyrr 187 00:08:06,810 --> 00:08:09,840 í pset minn einn eða svo, en hvað er í raun verið að fara á? 188 00:08:09,840 --> 00:08:12,920 Jæja, við skulum taka a fljótur líta undir hetta á forrit sem 189 00:08:12,920 --> 00:08:17,017 hvetur þess vegna sem við gefum þér CS50 bókasafn, og reyndar eins og á síðasta viku, 190 00:08:17,017 --> 00:08:18,850 við byrjuðum að taka þá þjálfun hjól burt. 191 00:08:18,850 --> 00:08:21,080 Þannig að þetta er nú flokkaður af Postmortem hvað 192 00:08:21,080 --> 00:08:23,690 hefur verið í gangi inni CS50 bókasafn, 193 00:08:23,690 --> 00:08:27,250 jafnvel þótt við nú mun byrja að flytja í burtu frá honum fyrir flest forrit. 194 00:08:27,250 --> 00:08:29,460 >> Svo er þetta forrit sem heitir scanf 0. 195 00:08:29,460 --> 00:08:30,510 Það er frábær stutt. 196 00:08:30,510 --> 00:08:33,909 Það hefur bara þessar línur, en það kynnir virka heitir scanf 197 00:08:33,909 --> 00:08:36,909 að við erum í raun að fara að sjá í stund inni í CS50 bókasafn, 198 00:08:36,909 --> 00:08:38,600 að vísu í örlítið mismunandi hátt. 199 00:08:38,600 --> 00:08:41,330 Þannig að þetta forrit á línu 16 er að lýsa breytilega x. 200 00:08:41,330 --> 00:08:43,150 Svo gefa mér fjögur bæti fyrir int. 201 00:08:43,150 --> 00:08:45,750 Það er verið að segja notandi, Fjöldi vinsamlegast, og þá 202 00:08:45,750 --> 00:08:49,010 þetta er áhugavert lína sem reyndar bindur saman í síðustu viku 203 00:08:49,010 --> 00:08:49,790 og þetta. 204 00:08:49,790 --> 00:08:53,230 Scanf, og þá eftir það tekur snið band, bara eins printf, 205 00:08:53,230 --> 00:08:57,480 % i þýðir int, og þá tekur það Önnur rökin sem lítur svolítið 206 00:08:57,480 --> 00:08:58,260 angurvær. 207 00:08:58,260 --> 00:09:01,880 Það er merkið x, og að muna, við sáum aðeins í þetta sinn í síðustu viku. 208 00:09:01,880 --> 00:09:03,465 Hvað þýðir merkið x tákna? 209 00:09:03,465 --> 00:09:06,210 210 00:09:06,210 --> 00:09:08,450 Hvað þýðir merkið gera í C? 211 00:09:08,450 --> 00:09:08,950 Já? 212 00:09:08,950 --> 00:09:10,024 >> Áhorfendur: The póstfang. 213 00:09:10,024 --> 00:09:11,190 DAVID Malan: The póstfang. 214 00:09:11,190 --> 00:09:13,190 Svo er það hið gagnstæða stjörnunnar rekstraraðila, 215 00:09:13,190 --> 00:09:17,270 en stjarnan rekstraraðila segir, fara í þetta netfang, að merkið rekstraraðila 216 00:09:17,270 --> 00:09:20,280 segir, reikna út netfang þessarar breytu, 217 00:09:20,280 --> 00:09:23,530 og svo er þetta lykillinn, því Tilgangur Scanf í lífinu 218 00:09:23,530 --> 00:09:26,320 er að skanna notanda inntak frá lyklaborðinu, 219 00:09:26,320 --> 00:09:29,970 eftir hvað hann eða hún tegundir, og þá lesa inntak sem notanda 220 00:09:29,970 --> 00:09:32,970 í breytu, en við sá á síðustu tveimur vikum 221 00:09:32,970 --> 00:09:36,080 að það skipti fall sem við reyndi áreynslulaust að innleiða 222 00:09:36,080 --> 00:09:37,110 var bara brotinn. 223 00:09:37,110 --> 00:09:42,470 Muna að við skipti virka, ef við lýst bara A og B sem ints, 224 00:09:42,470 --> 00:09:47,040 við vissum tekist að skipta um tvær breytur inni í skipti 225 00:09:47,040 --> 00:09:50,080 Rétt eins og með mjólk og OJ, en um leið og skipti aftur, 226 00:09:50,080 --> 00:09:55,200 hvað var niðurstaðan varðar að x og y, upprunalega gildi? 227 00:09:55,200 --> 00:09:55,700 Ekkert. 228 00:09:55,700 --> 00:09:56,200 Já. 229 00:09:56,200 --> 00:09:59,754 Ekkert gerðist þann tíma, vegna þess að skiptasamninga breyta aðeins sínum staðbundin afrit, 230 00:09:59,754 --> 00:10:01,670 sem er að segja, allir í þetta sinn, þegar við höfum 231 00:10:01,670 --> 00:10:04,010 verið farið í málflutningi að virka, við erum 232 00:10:04,010 --> 00:10:05,939 bara komið afrit af þessum rifrildum. 233 00:10:05,939 --> 00:10:07,980 Þú getur gert við það hvað sem þú vilt með þeim, 234 00:10:07,980 --> 00:10:10,890 en þeir eru að fara að hafa ekki áhrif á upprunaleg gildi. 235 00:10:10,890 --> 00:10:13,650 Svo er þetta erfitt ef þú vil hafa virka eins Scanf 236 00:10:13,650 --> 00:10:17,170 í lífinu, en tilgangur hennar er að skanna inntak notanda frá lyklaborðinu 237 00:10:17,170 --> 00:10:22,010 og þá fylla í eyðurnar, svo að tala, það er, gefa breytu að X 238 00:10:22,010 --> 00:10:25,410 gildi, vegna þess að ef ég væri bara fara á X Scanf, 239 00:10:25,410 --> 00:10:28,790 ef þú telur rökfræði síðasta viku, scanf getur gert hvað sem það vill 240 00:10:28,790 --> 00:10:33,100 með afrit af x, en það gæti ekki varanlega breyta x nema við gefum 241 00:10:33,100 --> 00:10:37,120 Scanf fjársjóð kort, svo að segja, þar sem x markar blettur, þar 242 00:10:37,120 --> 00:10:41,860 við fara í heimilisfang x þannig að scanf getur farið þangað og í raun breyting 243 00:10:41,860 --> 00:10:42,920 verðmæti x. 244 00:10:42,920 --> 00:10:45,080 Og svo reyndar allt sem þetta forrit gerir 245 00:10:45,080 --> 00:10:53,180 ef ég geri scanf 0, í heimildarmanni mínum 5m skrá, gera scanf 0, 246 00:10:53,180 --> 00:10:57,730 punktur rista scanf, fjöldi vinsamlegast 50, takk fyrir 50. 247 00:10:57,730 --> 00:11:01,020 >> Svo það er ekki allt sem áhugavert, en hvað er örugglega að gerast 248 00:11:01,020 --> 00:11:04,820 er að um leið og ég kalla Scanf hér, gildi x 249 00:11:04,820 --> 00:11:06,410 er varanlega breytt. 250 00:11:06,410 --> 00:11:08,335 Nú, þetta virðist ágætur og gott, og í raun, það 251 00:11:08,335 --> 00:11:11,200 virðist eins og við gerum ekki raunverulega þörf CS50 bókasafn yfirleitt lengur. 252 00:11:11,200 --> 00:11:13,960 Til dæmis, við skulum hlaupa þetta einu sinni enn hér. 253 00:11:13,960 --> 00:11:15,750 Leyfðu mér að opna það fyrir a second. 254 00:11:15,750 --> 00:11:20,600 Prófum númer skaltu og í stað þess að segja 50 eins og áður, 255 00:11:20,600 --> 00:11:22,810 við skulum bara segja nei. 256 00:11:22,810 --> 00:11:24,000 OK, það er svolítið skrýtið. 257 00:11:24,000 --> 00:11:25,270 OK. 258 00:11:25,270 --> 00:11:28,680 Og bara nokkrar bull hér. 259 00:11:28,680 --> 00:11:31,170 Svo það virðist ekki höndla rangra aðstæður. 260 00:11:31,170 --> 00:11:33,620 Þannig að við þurfum að óverulega byrja bæta nokkrum error-stöðva 261 00:11:33,620 --> 00:11:37,460 til að tryggja að notandinn hefur slegið í raunverulegum fjölda eins og 50, 262 00:11:37,460 --> 00:11:40,720 því virðist skrifa orð er ekki greind eins erfið, 263 00:11:40,720 --> 00:11:42,020 en það líklega ætti að vera. 264 00:11:42,020 --> 00:11:46,450 >> Við skulum líta á þessa útgáfu nú er það tilraun mín til að reimplement GetString. 265 00:11:46,450 --> 00:11:48,437 Ef scanf hefur allt þetta virkni innbyggður í, 266 00:11:48,437 --> 00:11:51,270 hvers vegna höfum við verið að fór að fikta við þetta þjálfun hjól eins GetString? 267 00:11:51,270 --> 00:11:55,450 Jæja, hér er kannski mitt eigið einföld útgáfa af GetString 268 00:11:55,450 --> 00:12:00,766 þar fyrir viku síðan, gæti ég hef sagt, gefa mér band og kalla það biðminni. 269 00:12:00,766 --> 00:12:03,390 Í dag ætla ég að byrja bara segja bleikju stjörnu, sem muna, 270 00:12:03,390 --> 00:12:04,400 það er bara samheiti. 271 00:12:04,400 --> 00:12:06,629 Það lítur scarier en það er nákvæmlega það sama. 272 00:12:06,629 --> 00:12:09,420 Svo gefa mér breytilega heitir biðminni það er að fara að geyma band, 273 00:12:09,420 --> 00:12:12,780 segja notandi band takk, og þá, bara eins og áður, 274 00:12:12,780 --> 00:12:17,760 við skulum reyna að taka lán þessa lexíu scanf % s í þetta sinn og þá fara í biðminni. 275 00:12:17,760 --> 00:12:19,310 Nú, fljótur geðheilbrigði athuga. 276 00:12:19,310 --> 00:12:22,120 Hvers vegna er ég ekki að segja merkið biðminni þennan tíma? 277 00:12:22,120 --> 00:12:25,190 278 00:12:25,190 --> 00:12:26,625 Álykta frá fyrra dæmi. 279 00:12:26,625 --> 00:12:28,000 Áhorfendur: Char stjarna er bendi. 280 00:12:28,000 --> 00:12:29,920 DAVID Malan: Einmitt, því að þessu sinni, bleikju 281 00:12:29,920 --> 00:12:34,080 stjarna er þegar bendillinn, heimilisfang, með því að skilgreina sem star vera þar. 282 00:12:34,080 --> 00:12:37,530 Og ef scanf ráð netfang, það nægir bara að fara í biðminni. 283 00:12:37,530 --> 00:12:39,260 Ég þarf ekki að segja merkið biðminni. 284 00:12:39,260 --> 00:12:42,177 Fyrir forvitinn, þú gætir gera eitthvað eins og this. 285 00:12:42,177 --> 00:12:43,510 Það myndi hafa mismunandi merkingu. 286 00:12:43,510 --> 00:12:47,240 Það myndi gefa þér bendi til músina, sem er í raun 287 00:12:47,240 --> 00:12:50,050 gilt hlutur í C, en fyrir nú, við skulum halda það einfalt 288 00:12:50,050 --> 00:12:51,750 og halda sögu stöðug. 289 00:12:51,750 --> 00:12:54,100 Ég ætla bara að fara að fara í biðminni og það er rétt. 290 00:12:54,100 --> 00:12:56,487 Vandamálið er þó að þetta. 291 00:12:56,487 --> 00:12:58,820 Leyfðu mér að fara á undan og keyra þetta program eftir að setja saman það. 292 00:12:58,820 --> 00:13:00,902 Gera scanf 1. 293 00:13:00,902 --> 00:13:02,610 Fjandinn það, þýðanda míns smitandi villa mína. 294 00:13:02,610 --> 00:13:04,090 Gefðu mér eina sekúndu. 295 00:13:04,090 --> 00:13:05,460 Clang. 296 00:13:05,460 --> 00:13:06,990 Skulum segja Scanf-1.c. 297 00:13:06,990 --> 00:13:10,880 298 00:13:10,880 --> 00:13:11,380 OK. 299 00:13:11,380 --> 00:13:12,720 Það sem við förum. 300 00:13:12,720 --> 00:13:14,280 Ég þarf það. 301 00:13:14,280 --> 00:13:16,750 CS50 ID hefur ýmis stillingar 302 00:13:16,750 --> 00:13:18,280 sem verja þig gegn sjálfum sér. 303 00:13:18,280 --> 00:13:21,300 Ég þurfti að slökkva á þeim með því að gangi clang handvirkt í þetta sinn. 304 00:13:21,300 --> 00:13:22,140 Svo string vinsamlegast. 305 00:13:22,140 --> 00:13:25,560 Ég ætla að fara á undan og sláðu í uppáhalds Hello my world. 306 00:13:25,560 --> 00:13:26,490 OK, null. 307 00:13:26,490 --> 00:13:27,700 Það er ekki það sem ég slóst. 308 00:13:27,700 --> 00:13:29,690 Svo það er til marks um eitthvað vera rangt. 309 00:13:29,690 --> 00:13:33,920 Leyfðu mér að fara á undan og sláðu í mjög langan streng. 310 00:13:33,920 --> 00:13:37,210 Takk fyrir null og ég veit ekki ef ég ætla að vera fær um að hrun það. 311 00:13:37,210 --> 00:13:40,240 Við skulum reyna smá afrit líma og sjá hvort þetta hjálpar. 312 00:13:40,240 --> 00:13:43,290 Bara líma mikið af þessu. 313 00:13:43,290 --> 00:13:47,310 Það er örugglega stærri band en venjulega. 314 00:13:47,310 --> 00:13:51,450 Við skulum bara virkilega skrifa það. 315 00:13:51,450 --> 00:13:51,950 Nei 316 00:13:51,950 --> 00:13:52,650 Fari það. 317 00:13:52,650 --> 00:13:53,480 Stjórn fannst ekki. 318 00:13:53,480 --> 00:13:54,550 Svo er það óskyld. 319 00:13:54,550 --> 00:13:56,440 Það er vegna þess að ég límt slæmar stafir, 320 00:13:56,440 --> 00:13:59,780 en þetta kemur í ljós er ekki að fara að vinna. 321 00:13:59,780 --> 00:14:03,510 >> Við skulum reyna þetta einu sinni enn, því það er meira gaman ef við hrun í raun það. 322 00:14:03,510 --> 00:14:09,116 Skulum slá þetta og nú er ég að fara að afrita mjög langan streng 323 00:14:09,116 --> 00:14:10,990 og nú skulum sjá hvort við geta hrun þetta. 324 00:14:10,990 --> 00:14:14,235 Eftir ég sleppt rými og nýjar línur og semikommum 325 00:14:14,235 --> 00:14:16,035 og allt angurvær stafir. 326 00:14:16,035 --> 00:14:16,535 Sláðu. 327 00:14:16,535 --> 00:14:21,090 328 00:14:21,090 --> 00:14:22,880 Og nú net er bara að vera hægur. 329 00:14:22,880 --> 00:14:27,460 Ég hélt niður Command-V of lengi, greinilega. 330 00:14:27,460 --> 00:14:28,190 Fari það! 331 00:14:28,190 --> 00:14:29,260 Stjórn fannst ekki. 332 00:14:29,260 --> 00:14:29,780 >> OK. 333 00:14:29,780 --> 00:14:32,240 Jæja, málið er þó eftirfarandi. 334 00:14:32,240 --> 00:14:36,910 Svo hvað er í raun að fara á þessari yfirlýsingu 335 00:14:36,910 --> 00:14:39,240 af bleikju stjörnu biðminni á línu 16? 336 00:14:39,240 --> 00:14:41,820 Svo hvað er ég að fá þegar ég lýsa yfir músina? 337 00:14:41,820 --> 00:14:47,440 Það eina sem ég fæ er fjögurra bæti gildi heitir biðminni, en hvað er inni í henni 338 00:14:47,440 --> 00:14:49,540 í augnablikinu? 339 00:14:49,540 --> 00:14:50,930 Það er bara nokkrar sorp gildi. 340 00:14:50,930 --> 00:14:54,170 Vegna hvenær þú lýsa breytu í C, er það bara sumir sorp gildi, 341 00:14:54,170 --> 00:14:56,220 og við erum farin að Ferð á þessum veruleika. 342 00:14:56,220 --> 00:14:59,720 Nú, þegar ég segi scanf, fara á þetta netfang 343 00:14:59,720 --> 00:15:01,520 og setja hvað sem notandinn slær inn. 344 00:15:01,520 --> 00:15:06,400 Ef notandinn slær í halló heimurinn, vel, hvar á ég að setja það? 345 00:15:06,400 --> 00:15:07,750 Jafnalausnin er sorp gildi. 346 00:15:07,750 --> 00:15:11,510 >> Svo er það svona eins og ör sem er að benda hver veit hvar. 347 00:15:11,510 --> 00:15:13,880 Kannski það er að benda hérna í minni mínu. 348 00:15:13,880 --> 00:15:16,560 Og svo þegar notandi gerðir í Halló heimur, 349 00:15:16,560 --> 00:15:22,380 forritið reynir að setja string Halló heimur sviga 0 350 00:15:22,380 --> 00:15:23,910 í þeirri klumpur af minni. 351 00:15:23,910 --> 00:15:27,070 En með miklum líkum, en greinilega ekki 100% líkur, 352 00:15:27,070 --> 00:15:30,440 tölvan er að fara að þá hrun forritið vegna þess að þetta er ekki 353 00:15:30,440 --> 00:15:32,490 minni ég ætti að vera heimilt að snerta. 354 00:15:32,490 --> 00:15:36,330 Svo í stuttu máli, þetta forrit er gölluð í nákvæmlega þeirri ástæðu. 355 00:15:36,330 --> 00:15:38,070 Ég er í grundvallaratriðum ekki gera það? 356 00:15:38,070 --> 00:15:42,366 Hvaða skref hef ég sleppt, rétt eins við sleppt með fyrsta Binky er td? 357 00:15:42,366 --> 00:15:42,866 Já? 358 00:15:42,866 --> 00:15:43,710 >> Áhorfendur: Minni úthlutun? 359 00:15:43,710 --> 00:15:45,001 >> DAVID Malan: Minni úthlutun. 360 00:15:45,001 --> 00:15:48,400 Ég hef reyndar ekki úthlutað allir minni strengsins. 361 00:15:48,400 --> 00:15:50,270 Þannig að við getum lagað þetta í nokkra vegu. 362 00:15:50,270 --> 00:15:52,700 Einn, getum við halda það einfalt og í raun, nú þú ert 363 00:15:52,700 --> 00:15:55,116 að fara að byrja að sjá blurring af línunum á milli hvað 364 00:15:55,116 --> 00:15:58,520 fylki er, hvað band er, hvað bleikju stjörnu er, hvað fylki af chars 365 00:15:58,520 --> 00:15:59,020 er. 366 00:15:59,020 --> 00:16:02,450 Hér er annað dæmi sem felur í sér strengi og fyrirvara 367 00:16:02,450 --> 00:16:05,690 allt sem ég hef gert á línu 16 er, í stað þess að segja 368 00:16:05,690 --> 00:16:09,530 sem biðminni er að fara til vera a bleikju stjarna, bendi á klumpur af minni, 369 00:16:09,530 --> 00:16:14,057 Ég ætla að mjög stanslaust gefa mig vera stuðpúði fyrir 16 stafi, 370 00:16:14,057 --> 00:16:16,390 og í raun, ef þú ert kunnuglegur með hugtakinu höggdeyfir, 371 00:16:16,390 --> 00:16:20,570 líklega úr heimi vídeó, þar sem vídeó er höggdeyfir, höggdeyfir, 372 00:16:20,570 --> 00:16:21,175 höggdeyfir. 373 00:16:21,175 --> 00:16:22,550 Jæja, hvað er tengingin hér? 374 00:16:22,550 --> 00:16:24,960 Jæja, Inni YouTube og inni í vídeó leikmaður 375 00:16:24,960 --> 00:16:27,200 almennt er fylki sem er stærri en 16. 376 00:16:27,200 --> 00:16:30,340 Það gæti verið fjölbreytta stærð einum megabæti, kannski 10 megabæti, 377 00:16:30,340 --> 00:16:34,330 og í því fylki er vafrann þinn sækja a heild búnt af bætum, 378 00:16:34,330 --> 00:16:37,500 a heild búnt af megabæta vídeó og vídeó leikmaður, 379 00:16:37,500 --> 00:16:40,930 YouTube er eða hver er, byrjar lesa bæti úr því fylki, 380 00:16:40,930 --> 00:16:43,530 og hvenær þú sérð Bæta höggdeyfir, höggdeyfir, 381 00:16:43,530 --> 00:16:46,350 sem þýðir að leikmaður hefur fengið til loka þessi fylking. 382 00:16:46,350 --> 00:16:50,430 The net er svo hægur að það hefur ekki fylla array með fleiri bæti 383 00:16:50,430 --> 00:16:55,610 og þannig að þú ert út af bitum til að sýna fyrir notandann. 384 00:16:55,610 --> 00:16:59,430 >> Svo er biðminni líklegur tíma hér í að það er bara fylki, klumpur af minni. 385 00:16:59,430 --> 00:17:02,530 Og þetta mun laga það vegna þess að það kemur í ljós 386 00:17:02,530 --> 00:17:07,410 að þú getur meðhöndla fylki eins og þeir eru heimilisföng, jafnvel þótt biðminni 387 00:17:07,410 --> 00:17:10,710 er bara tákn, það er röð af stöfum, dúa, 388 00:17:10,710 --> 00:17:14,760 það er gagnlegt fyrir mig, forritari, þú geta fara framhjá nafn sitt í kring 389 00:17:14,760 --> 00:17:17,079 eins og það væri músina, eins og það 390 00:17:17,079 --> 00:17:21,000 voru heimilisfang klumpur minni fyrir 16 stafir. 391 00:17:21,000 --> 00:17:24,530 Svo það er að segja, ég get framhjá sem scanf einmitt þessi orð 392 00:17:24,530 --> 00:17:30,670 og svo nú, ef ég geri þetta forrit, gera scanf 2, punktur rista scanf 2, 393 00:17:30,670 --> 00:17:35,386 og slá inn halló heimur, Sláðu, að time-- 394 00:17:35,386 --> 00:17:37,590 >> Hmm, hvað gerðist? 395 00:17:37,590 --> 00:17:39,340 String vinsamlegast. 396 00:17:39,340 --> 00:17:41,430 Hvað gerði ég rangt? 397 00:17:41,430 --> 00:17:43,800 Halló heimur, biðminni. 398 00:17:43,800 --> 00:17:44,705 Halló heimur. 399 00:17:44,705 --> 00:17:48,201 400 00:17:48,201 --> 00:17:49,420 Ah, ég veit hvað það er að gera. 401 00:17:49,420 --> 00:17:49,920 OK. 402 00:17:49,920 --> 00:17:51,628 Svo það er að lesa upp þar til fyrsta pláss. 403 00:17:51,628 --> 00:17:55,680 Svo skulum svindla fyrir réttlátur a augnablik og segi ég vildi bara að slá eitthvað 404 00:17:55,680 --> 00:18:01,408 mjög lengi eins og þetta er langur setning það er einn, tveir, þrír, fjórir, fimm, 405 00:18:01,408 --> 00:18:04,420 sex, sjö, átta, níu, 10, 11, 12, 13, 14, 15, 16. 406 00:18:04,420 --> 00:18:05,300 OK. 407 00:18:05,300 --> 00:18:07,600 Það er örugglega löng setning. 408 00:18:07,600 --> 00:18:10,710 Svo er þessi setning lengur en 16 stafir 409 00:18:10,710 --> 00:18:13,670 og svo þegar ég ýta á Enter, hvað er að fara að gerast? 410 00:18:13,670 --> 00:18:16,940 Vel, í þessu tilfelli þess saga, ég hafði lýst biðminni 411 00:18:16,940 --> 00:18:22,190 að í raun að vera array með 16 stafir tilbúinn til að fara. 412 00:18:22,190 --> 00:18:27,426 Svo einn, tveir, þrír, fjórir, fimm, sex, sjö, átta, níu, 10, 11, 12, 13, 14, 413 00:18:27,426 --> 00:18:29,440 15, 16. 414 00:18:29,440 --> 00:18:34,410 Svo 16 stafir, og nú, þegar ég lesa í eitthvað eins og þetta er langur 415 00:18:34,410 --> 00:18:43,950 setning, hvað er að fara að gerast er sem ég ætla að lesa í þetta er langur 416 00:18:43,950 --> 00:18:49,660 S-E-N-T-E-N-C-E, setningu. 417 00:18:49,660 --> 00:18:52,270 >> Svo er þetta vísvitandi a slæmur hlutur sem ég 418 00:18:52,270 --> 00:18:55,060 halda að skrifa út fyrir Mörk array minn, 419 00:18:55,060 --> 00:18:56,660 út fyrir mörk biðminni minn. 420 00:18:56,660 --> 00:19:00,100 Ég gæti fengið heppinn og forritið mun halda áfram að keyra og ekki sama, 421 00:19:00,100 --> 00:19:03,450 en almennt séð, þetta mun örugglega hrun program minn, 422 00:19:03,450 --> 00:19:06,440 og það er padda í minn kóða stund ég stíga 423 00:19:06,440 --> 00:19:08,576 út fyrir mörk af því fylki, vegna þess að ég 424 00:19:08,576 --> 00:19:10,450 veit ekki hvort það er endilega að fara að hrun 425 00:19:10,450 --> 00:19:12,120 eða ef ég ætla bara að fara að fá heppinn. 426 00:19:12,120 --> 00:19:15,750 Svo er þetta erfið vegna þess að í þetta mál, það virðist virka 427 00:19:15,750 --> 00:19:20,931 og við skulum freista örlög hér, jafnvel þótt IDE virðist þola töluvert 428 00:19:20,931 --> 00:19:21,430 of-- 429 00:19:21,430 --> 00:19:22,040 >> Það sem við förum. 430 00:19:22,040 --> 00:19:23,240 Loksins. 431 00:19:23,240 --> 00:19:26,470 Þannig að ég er sú eina sem getur séð þetta. 432 00:19:26,470 --> 00:19:29,630 Svo ég hafði bara einhver fjöldi af gaman vélritun út mjög lengi raunverulegum setningu 433 00:19:29,630 --> 00:19:32,800 að það fór vissulega 16 bytes, vegna þess að ég 434 00:19:32,800 --> 00:19:38,050 slóst í þessu brjálaða langa multi-lína setningu, og þá taka eftir hvað gerðist. 435 00:19:38,050 --> 00:19:41,110 The program reyndi að prenta það og þá fékk skiptingu kenna 436 00:19:41,110 --> 00:19:44,430 og skiptingu galla er þegar eitthvað eins og þetta gerist 437 00:19:44,430 --> 00:19:47,650 og stýrikerfi segir nei, get ekki snerta þessi minni. 438 00:19:47,650 --> 00:19:49,570 Við erum að fara að drepa forritið öllu leyti. 439 00:19:49,570 --> 00:19:51,180 >> Svo virðist þetta erfið. 440 00:19:51,180 --> 00:19:54,540 Ég hef bætt á dagskrá að félag að minnsta kosti hafa sumir minni, 441 00:19:54,540 --> 00:19:58,000 en þetta virðist að takmarka virka GetString til að fá 442 00:19:58,000 --> 00:20:00,780 strengir af einhverjum endanlegum lengd 16. 443 00:20:00,780 --> 00:20:04,200 Svo ef þú vilt styðja lengur setningar en 16 stafir, 444 00:20:04,200 --> 00:20:04,880 hvað gerir þú? 445 00:20:04,880 --> 00:20:07,970 Jæja, getur þú aukið Stærð þessa biðminni til 32 446 00:20:07,970 --> 00:20:09,190 eða sem virðist konar stutt. 447 00:20:09,190 --> 00:20:12,260 Hvers vegna eigum við ekki að gera bara það 1000 en ýta aftur. 448 00:20:12,260 --> 00:20:17,100 Hvað er svar innsæi á bara forðast þetta vandamál með því að gera 449 00:20:17,100 --> 00:20:20,660 biðminni minn stærri, eins og 1000 stafir? 450 00:20:20,660 --> 00:20:23,470 Með því að innleiða getstring þessa leið. 451 00:20:23,470 --> 00:20:27,130 Hvað er gott eða slæmt hér? 452 00:20:27,130 --> 00:20:28,033 Já? 453 00:20:28,033 --> 00:20:30,574 Áhorfendur: Ef þér bindið upp mikið pláss og þú notar það ekki, 454 00:20:30,574 --> 00:20:33,500 þá getur þú ekki endurúthluta þessi pláss. 455 00:20:33,500 --> 00:20:34,500 DAVID Malan: Algjörlega. 456 00:20:34,500 --> 00:20:38,480 Það er sóun að því leyti eins og ef þú ert ekki raunverulega þörf 900 af þeim bæti 457 00:20:38,480 --> 00:20:41,057 og enn þú ert að biðja um 1000 í alls engu að síður, 458 00:20:41,057 --> 00:20:44,140 þú ert bara að neyta meira minni á tölvu notandans en þú þarft að, 459 00:20:44,140 --> 00:20:45,740 og eftir allt, sumir af þú hefur nú þegar komið 460 00:20:45,740 --> 00:20:47,620 í lífinu að þegar þú ert gangi fullt af forritum 461 00:20:47,620 --> 00:20:50,470 og þeir eru að borða upp fullt af minni, þetta getur í raun haft áhrif á árangur 462 00:20:50,470 --> 00:20:52,220 og reynslu notandans á tölvunni. 463 00:20:52,220 --> 00:20:56,090 Svo er það eins konar latur lausn, fyrir víst, og öfugt, 464 00:20:56,090 --> 00:21:00,140 það er ekki bara sóun, hvað vandamálið enn, jafnvel ef ég geri biðminni minn 465 00:21:00,140 --> 00:21:02,100 1000? 466 00:21:02,100 --> 00:21:02,600 Já? 467 00:21:02,600 --> 00:21:04,475 >> Áhorfendur: The band er lengd 1001. 468 00:21:04,475 --> 00:21:05,350 DAVID Malan: Einmitt. 469 00:21:05,350 --> 00:21:08,280 Ef strengurinn er lengd 1001, þú hafa nákvæmlega sama vandamál, 470 00:21:08,280 --> 00:21:10,705 og með því að rök mín, myndi ég bara þá gera það 2000, 471 00:21:10,705 --> 00:21:12,830 en þú veist ekki í fara hversu stór hún ætti að vera, 472 00:21:12,830 --> 00:21:16,890 og enn, ég er að safna saman áætlun mína fyrir að láta fólk nota og sækja 473 00:21:16,890 --> 00:21:17,390 það. 474 00:21:17,390 --> 00:21:21,490 Svo er þetta nákvæmlega eins konar efni sem CS50 bókasafn reynir 475 00:21:21,490 --> 00:21:24,750 til að hjálpa okkur með og við munum aðeins litið á sumir af undirliggjandi framkvæmd 476 00:21:24,750 --> 00:21:29,790 hér, en þetta er CS50 punktur C. Þetta er skrá sem hefur verið á CS50 IDE 477 00:21:29,790 --> 00:21:31,420 allar þessar vikur sem þú hefur verið að nota. 478 00:21:31,420 --> 00:21:34,280 Það er pre-saman og þú hefur verið að nota það sjálfkrafa 479 00:21:34,280 --> 00:21:38,780 eðli þess að hafa þjóta L CS50 fána með clang, 480 00:21:38,780 --> 00:21:42,300 en ef ég skruna niður í gegnum allar þessar aðgerðir, hér er GetString, 481 00:21:42,300 --> 00:21:44,636 og bara til að gefa þér bragð af hvað er að gerast, 482 00:21:44,636 --> 00:21:46,760 við skulum taka a fljótur líta á hlutfallslegt flókið. 483 00:21:46,760 --> 00:21:48,870 Það er ekki frábær langur virka, en við gerðum ekki 484 00:21:48,870 --> 00:21:52,530 þurfa að hugsa allt erfitt um hvernig á að fara um að fá strengi. 485 00:21:52,530 --> 00:21:55,660 >> Svo er hér biðminni minn og ég virðist frumstilla hana á núll. 486 00:21:55,660 --> 00:21:57,990 Þetta, auðvitað, er sama og bleikju stjarna, 487 00:21:57,990 --> 00:22:00,585 en ég ákvað í framkvæmd CS50 bókasafn 488 00:22:00,585 --> 00:22:02,460 að ef við erum að fara að vera alveg dynamic, 489 00:22:02,460 --> 00:22:05,770 Ég veit ekki fyrirfram hversu stór af a band notendur eru að fara til að vilja fá. 490 00:22:05,770 --> 00:22:08,140 Þannig að ég ætla að byrja með bara tómt streng 491 00:22:08,140 --> 00:22:11,507 og ég ætla að byggja upp eins mikið minni og ég þarf að passa notanda band 492 00:22:11,507 --> 00:22:13,340 og ef ég hef ekki nóg, ég ætla að spyrja 493 00:22:13,340 --> 00:22:15,010 stýrikerfi fyrir meira minni. 494 00:22:15,010 --> 00:22:17,510 Ég ætla að færa band þeirra í stærri klumpur af minni 495 00:22:17,510 --> 00:22:21,847 og ég ætla að gefa út eða losa í nægilega stór klumpur af minni 496 00:22:21,847 --> 00:22:23,680 og við erum bara að fara til að gera þetta iteratively. 497 00:22:23,680 --> 00:22:25,570 >> Svo fljótlega litið, hér er bara breyta 498 00:22:25,570 --> 00:22:28,780 sem ég ætla að halda utan af getu biðminni minn. 499 00:22:28,780 --> 00:22:30,071 Hversu margir bytes get ég passa? 500 00:22:30,071 --> 00:22:32,070 Hér er breytilegt n með sem ég ætla að halda 501 00:22:32,070 --> 00:22:36,200 utan um hversu margir bæti eru í raun í biðminni eða sem notandinn hefur slegið. 502 00:22:36,200 --> 00:22:39,900 Ef þú hefur ekki séð þetta áður, þér getur tilgreint að breyta eins og int 503 00:22:39,900 --> 00:22:46,370 er óundirritaður, sem eins og nafnið gefur til kynna, þýðir að það er ekki neikvæð, og hvers vegna vildi 504 00:22:46,370 --> 00:22:50,590 Ég vil alltaf að standa tilgreina sem int er ekki bara int, 505 00:22:50,590 --> 00:22:52,540 en það er óundirritaður INT? 506 00:22:52,540 --> 00:22:55,064 Það er a non-neikvæð Int. 507 00:22:55,064 --> 00:22:56,355 Hvað þýðir [inaudible] meina? 508 00:22:56,355 --> 00:22:58,910 >> Áhorfendur: Það er lýsa upphæð minni sem hægt er að [inaudible]. 509 00:22:58,910 --> 00:22:59,660 >> DAVID Malan: Já. 510 00:22:59,660 --> 00:23:03,710 Þannig að ef ég segi óundirritaður, þetta er í raun gefa þér einn bita af auka minni 511 00:23:03,710 --> 00:23:07,440 og það virðist eins konar kjánalegt, en ef þig hafa einn hluti af viðbótar minni, sem 512 00:23:07,440 --> 00:23:09,940 þýðir að þú hefur tvisvar eins og margir gildi er hægt að tákna, 513 00:23:09,940 --> 00:23:11,570 vegna þess að það getur verið 0 eða 1. 514 00:23:11,570 --> 00:23:14,660 Svo við vanræksla, int má bil neikvæð 2 milljarðar alla leið 515 00:23:14,660 --> 00:23:16,030 allt að jákvæðu 2 milljarða króna. 516 00:23:16,030 --> 00:23:18,540 Þeir eru stór svið, en það er samt eins konar eyðslusamur 517 00:23:18,540 --> 00:23:21,280 ef þér þykir vænt aðeins um stærðir, sem bara innsæi 518 00:23:21,280 --> 00:23:24,620 ætti að vera non-neikvæðar eða jákvæð eða 0, og þá, 519 00:23:24,620 --> 00:23:28,884 hvers vegna þú ert að sóa 2 milljarða Möguleg gildi fyrir neikvæðum tölum 520 00:23:28,884 --> 00:23:30,300 ef þú ert aldrei að fara að nota þá? 521 00:23:30,300 --> 00:23:35,350 Svo með því að segja óundirritaður, nú int minn getur vera á milli 0 og um 4 milljarða. 522 00:23:35,350 --> 00:23:39,280 >> Svo er hér bara int C ástæðum við munum ekki fá inn bara núna eins og 523 00:23:39,280 --> 00:23:42,280 hvers vegna það er int í stað af bleikju, en hér er 524 00:23:42,280 --> 00:23:44,630 GIST það er að fara á, og sumir yðar 525 00:23:44,630 --> 00:23:48,340 gæti verið að nota, til dæmis, á fgetc virka jafnvel í pset fjórum 526 00:23:48,340 --> 00:23:51,580 eða síðar, við munum sjá það aftur í Heimadæmi fimm, 527 00:23:51,580 --> 00:23:55,410 fgetc er gott því eins og nafnið konar, eins konar arcanely kynna, 528 00:23:55,410 --> 00:23:57,940 það er aðgerð sem fær staf og svo, 529 00:23:57,940 --> 00:24:00,690 hvað er í grundvallaratriðum öðruvísi um hvað við erum að gera í GetString 530 00:24:00,690 --> 00:24:03,110 er að við erum ekki að nota scanf á sama hátt. 531 00:24:03,110 --> 00:24:07,550 Við erum bara að creeping meðfram skref-fyrir-skref yfir hvað notandinn hefur slegið inn, 532 00:24:07,550 --> 00:24:10,970 vegna þess að við getum alltaf úthluta einn bleikju, og svo við getum alltaf örugglega 533 00:24:10,970 --> 00:24:15,599 líta á eitt char í einu, og galdur byrjar að gerast hér. 534 00:24:15,599 --> 00:24:17,890 Ég ætla að fletta niður til um miðja þessa aðgerð 535 00:24:17,890 --> 00:24:20,360 bara til að kynna stuttlega þessa aðgerð. 536 00:24:20,360 --> 00:24:22,670 Líkt það er malloc virka, það er 537 00:24:22,670 --> 00:24:27,740 a realloc virka þar realloc gerir þér kleift að endurúthluta klumpur af minni 538 00:24:27,740 --> 00:24:29,570 og gera það stærri eða minni. 539 00:24:29,570 --> 00:24:33,060 Svo löng saga stutt og með bylgja af hendi minni í dag, 540 00:24:33,060 --> 00:24:35,620 veit að það GetString er að gera er það er tegund 541 00:24:35,620 --> 00:24:39,720 af dularfullur vaxandi eða minnkandi biðminni sem notandi 542 00:24:39,720 --> 00:24:41,440 gerðir í band hans eða hennar. 543 00:24:41,440 --> 00:24:43,962 >> Svo ef notandinn slær inn stutt band, þetta númer 544 00:24:43,962 --> 00:24:45,920 Aðeins úthlutar nóg minni til að passa band. 545 00:24:45,920 --> 00:24:48,086 Ef notandinn heldur slá eins og ég gerði það aftur og aftur 546 00:24:48,086 --> 00:24:50,330 og aftur, vel, ef biðminni er upphaflega þetta stór 547 00:24:50,330 --> 00:24:53,310 og the program áttar, að Bíddu, ég er út af plássi, 548 00:24:53,310 --> 00:24:55,410 það er að fara að tvöfalda stærð á stuðpúðanum 549 00:24:55,410 --> 00:24:59,110 og þá tvöfalda biðminni og kóða sem gerir tvöföldun, 550 00:24:59,110 --> 00:25:03,170 ef við lítum á það hér, það er bara þetta snjall einn-Ferja. 551 00:25:03,170 --> 00:25:06,830 Þú getur ekki hafa séð þessa setningafræði áður, en ef þú segir stjörnu jafngildir, 552 00:25:06,830 --> 00:25:10,470 þetta er það sama og segja getu sinnum 2. 553 00:25:10,470 --> 00:25:13,390 Svo það heldur bara tvöföldun getu biðminni 554 00:25:13,390 --> 00:25:17,480 og þá segja realloc að gefa sjálft að miklu meira minni. 555 00:25:17,480 --> 00:25:19,720 >> Nú, eins og til hliðar, það eru aðrar aðgerðir í hér 556 00:25:19,720 --> 00:25:23,680 að við munum ekki líta inn öllum smáatriðum annað en að sýna í GetInt, 557 00:25:23,680 --> 00:25:26,150 við notum GetString í GetInt. 558 00:25:26,150 --> 00:25:28,192 Við athugum að það er ekki null, sem muna, 559 00:25:28,192 --> 00:25:30,400 er sérstakt gildi að þýðir eitthvað fór úrskeiðis. 560 00:25:30,400 --> 00:25:31,233 Við erum út af minni. 561 00:25:31,233 --> 00:25:32,310 Betri athuga það. 562 00:25:32,310 --> 00:25:33,710 Og við aftur með varðstaki gildi. 563 00:25:33,710 --> 00:25:37,850 En ég ætla að fresta að athugasemdir sem til hvers vegna og þá erum við að nota þessa frænda Scanf 564 00:25:37,850 --> 00:25:42,100 kallaði sscanf og það kemur í ljós sem sscanf eða string scanf, 565 00:25:42,100 --> 00:25:45,310 gerir þér kleift að taka a líta á the lína sem notandinn hefur slegið í og ​​láta þig 566 00:25:45,310 --> 00:25:49,610 greina það í raun og það sem ég er að gera hér er ég að segja sscanf, 567 00:25:49,610 --> 00:25:54,440 greina hvað notandinn hefur slegið í og ​​ganga úr skugga% i, 568 00:25:54,440 --> 00:25:59,250 það er heiltala í það, og við munum ekki komast í dag nákvæmlega hvers vegna það er líka 569 00:25:59,250 --> 00:26:03,760 a% c hér, en að í hnotskurn gerir okkur að uppgötva ef notandinn hefur slegið 570 00:26:03,760 --> 00:26:06,050 í eitthvað svikinn eftir fjölda. 571 00:26:06,050 --> 00:26:11,766 Svo ástæðan að GetInt og GetString segja þér að reyna aftur, reyna aftur, reyna aftur 572 00:26:11,766 --> 00:26:13,640 er vegna alls að kóða við höfum skrifað, 573 00:26:13,640 --> 00:26:17,900 Það er góður af að horfa á inntak notandans í því að tryggja það er alveg tölustafir 574 00:26:17,900 --> 00:26:21,700 eða það er í raun fljótandi lið gildi eða þess háttar, 575 00:26:21,700 --> 00:26:24,233 eftir því hvaða gildi virka þú ert að nota. 576 00:26:24,233 --> 00:26:25,060 >> Whew. 577 00:26:25,060 --> 00:26:25,710 OK. 578 00:26:25,710 --> 00:26:27,592 Það var munnfylli en punkturinn hér er 579 00:26:27,592 --> 00:26:29,550 að ástæða við höfðum þessir þjálfun hjól á 580 00:26:29,550 --> 00:26:32,880 er vegna þess að á lægsta stigi, það er bara svo margt sem 581 00:26:32,880 --> 00:26:35,674 getur farið úrskeiðis sem við vildum að preemptively höndla 582 00:26:35,674 --> 00:26:38,090 þessir hlutir vissulega í Elstu vikur í bekknum, 583 00:26:38,090 --> 00:26:42,230 en nú með pset fjórum og pset fimm og utan munt þú sjá að það er enn við 584 00:26:42,230 --> 00:26:45,570 þú heldur að þú ert færari að leysa þær tegundir af vandamálum 585 00:26:45,570 --> 00:26:47,180 sjálfur. 586 00:26:47,180 --> 00:26:51,770 Einhverjar spurningar um GetString eða GetInt? 587 00:26:51,770 --> 00:26:52,630 Já? 588 00:26:52,630 --> 00:26:55,130 >> Áhorfendur: Hvers vegna vildi þú tvöfaldur getu biðminni 589 00:26:55,130 --> 00:26:57,630 frekar en bara auka það eftir nákvæma upphæð? 590 00:26:57,630 --> 00:26:58,100 >> DAVID Malan: Góð spurning. 591 00:26:58,100 --> 00:27:00,474 Hvers vegna ættum við tvöfalda afkastagetu á stuðpúðanum öfugt 592 00:27:00,474 --> 00:27:02,800 bara auka það af sumum föstu gildi? 593 00:27:02,800 --> 00:27:03,900 Það var hönnun ákvörðun. 594 00:27:03,900 --> 00:27:08,590 Við ákváðum bara að vegna þess að það hefur tilhneigingu til að vera a lítill dýr tími-vitur til að spyrja 595 00:27:08,590 --> 00:27:10,440 stýrikerfi fyrir minni, við gerðum ekki 596 00:27:10,440 --> 00:27:13,210 langar að enda hafa komist aðstæður fyrir stór strengi 597 00:27:13,210 --> 00:27:14,960 sem við vorum að biðja OS aftur og aftur 598 00:27:14,960 --> 00:27:17,500 og aftur og aftur í hlé fyrir minni. 599 00:27:17,500 --> 00:27:20,387 Þannig að við ákváðum bara nokkuð geðþótta en við vonum sæmilega, 600 00:27:20,387 --> 00:27:22,720 að, þú veist hvað, við skulum reyna að fá á undan okkur 601 00:27:22,720 --> 00:27:25,520 og bara halda tvöföldun það svo að við að draga úr magn af sinnum 602 00:27:25,520 --> 00:27:29,010 við verðum að hringja malloc eða realloc, en alls dómur 603 00:27:29,010 --> 00:27:31,820 hringja í fjarveru vita hvað notendur might vilja til að slá inn. 604 00:27:31,820 --> 00:27:33,600 Báða vegu gæti verið áreiðanlegur. 605 00:27:33,600 --> 00:27:35,430 Að öllum líkindum gott. 606 00:27:35,430 --> 00:27:39,240 >> Svo skulum taka a líta á a par annarra aukaverkana af minni, 607 00:27:39,240 --> 00:27:41,610 hlutir sem getur farið úrskeiðis og tól sem þú getur 608 00:27:41,610 --> 00:27:43,880 nota til að ná þessar tegundir af mistökum. 609 00:27:43,880 --> 00:27:47,800 Það kemur í ljós þið öll, jafnvel þó check50 hefur ekki sagt þér eins mikið, 610 00:27:47,800 --> 00:27:50,050 hafa verið að skrifa þrjótur númer frá viku eitt, 611 00:27:50,050 --> 00:27:53,630 jafnvel þótt allar check50 próf eru liðin, og jafnvel ef þú og TF þitt 612 00:27:53,630 --> 00:27:56,010 eru frábær fullviss að númerið þitt virkar eins og ætlað. 613 00:27:56,010 --> 00:27:59,190 Númerið þitt hefur verið gallaðir eða gölluð í því allir þér, 614 00:27:59,190 --> 00:28:02,540 með því að nota CS50 bókasafn, hafa verið að leka minni. 615 00:28:02,540 --> 00:28:06,040 Þú hefur verið að spyrja stýrikerfi fyrir minni í flestum forritum 616 00:28:06,040 --> 00:28:08,850 þú hefur skrifað, en þú hefur aldrei gefið það til baka. 617 00:28:08,850 --> 00:28:12,110 Þú hefur kallað GetString og GetInt og GetFloat, 618 00:28:12,110 --> 00:28:15,270 en með GetString, hefur þú aldrei kallað unGetString eða gefa 619 00:28:15,270 --> 00:28:19,890 String Back eða þess háttar, en við höfum séð sem GetString er tekið frá minni 620 00:28:19,890 --> 00:28:22,810 með því að malloc eða þetta virka realloc, sem er bara 621 00:28:22,810 --> 00:28:25,670 mjög svipuð í anda, og enn höfum við verið 622 00:28:25,670 --> 00:28:28,629 spyrja stýrikerfi fyrir minni og minni aftur og aftur 623 00:28:28,629 --> 00:28:29,670 en aldrei gefa það aftur. 624 00:28:29,670 --> 00:28:33,550 >> Nú, eins og innskot, kemur í ljós að þegar forrit hættir, allt minni 625 00:28:33,550 --> 00:28:34,870 er sjálfkrafa leystur. 626 00:28:34,870 --> 00:28:36,150 Svo það er ekki verið gríðarstór samningur. 627 00:28:36,150 --> 00:28:38,590 Það er ekki að fara að brjóta IDE eða hægur hlutur dúnn, 628 00:28:38,590 --> 00:28:40,670 En þegar forrit gera almennt leka minni 629 00:28:40,670 --> 00:28:42,170 og þeir eru að keyra í langan tíma. 630 00:28:42,170 --> 00:28:45,640 Ef þú hefur einhvern tíma séð heimskur Little fjara boltinn í Mac OS eða stundaglas 631 00:28:45,640 --> 00:28:51,160 á Windows þar sem það er góður af hægja niður eða hugsa eða hugsa 632 00:28:51,160 --> 00:28:53,770 eða bara virkilega byrjar að hægja á skrið, 633 00:28:53,770 --> 00:28:56,960 það mjög hugsanlega gæti verið afleiðing af minni leka. 634 00:28:56,960 --> 00:28:59,970 Forritarar sem skrifaði hugbúnaður sem þú ert að nota 635 00:28:59,970 --> 00:29:03,570 spyrja stýrikerfi fyrir minni á nokkurra mínútna fresti, á klukkutíma fresti. 636 00:29:03,570 --> 00:29:05,570 En ef þú ert að keyra á hugbúnaður, jafnvel ef það er 637 00:29:05,570 --> 00:29:08,680 haldið í lágmarki í tölvunni klukkustundum eða dögum saman, 638 00:29:08,680 --> 00:29:11,980 þú gætir verið að spyrja fyrir fleiri og fleiri minni og aldrei að nota það 639 00:29:11,980 --> 00:29:15,180 og svo númerið þitt gæti verið, eða forrit gætu verið leka minni, 640 00:29:15,180 --> 00:29:18,350 og ef þú byrjar að leka minni, það er minna minni að öðrum verkefnum, 641 00:29:18,350 --> 00:29:21,220 og áhrifin eru að hægja allt niður. 642 00:29:21,220 --> 00:29:23,600 >> Nú, þetta er við langt einn af flestum grimmilegur forrit 643 00:29:23,600 --> 00:29:26,350 þú verður að hafa tækifæri að keyra í CS50 því leyti 644 00:29:26,350 --> 00:29:31,650 sem framleiðsla þess er enn meira dulspekilegur en Clang eða gera eða einhverju stjórn 645 00:29:31,650 --> 00:29:35,930 lína forrit sem við höfum keyrt áður en sem betur fer, embed in í framleiðslu sinni 646 00:29:35,930 --> 00:29:39,810 er einhver frábær gagnlegar ábendingar sem verður að vera gagnlegt annaðhvort fyrir pset fjórum 647 00:29:39,810 --> 00:29:41,510 eða örugglega pset fimm. 648 00:29:41,510 --> 00:29:44,250 Svo er Valgrind tól sem hægt er að nota til að líta 649 00:29:44,250 --> 00:29:46,930 fyrir minni leka í kerfinu þínu. 650 00:29:46,930 --> 00:29:48,570 Það er tiltölulega einfalt að keyra. 651 00:29:48,570 --> 00:29:51,420 Þú keyrir Valgrind og þá, jafnvel þó það er lítið fjölorður, 652 00:29:51,420 --> 00:29:54,440 þjóta þjóta leka athuga jafngildir fullu, og þá punktur 653 00:29:54,440 --> 00:29:56,320 rista og nafn program. 654 00:29:56,320 --> 00:30:00,010 Svo Valgrind mun þá keyra forritið þitt og á mjög lok program 655 00:30:00,010 --> 00:30:02,240 gangi áður en það hættir og gefur þér annað hvetja, 656 00:30:02,240 --> 00:30:04,980 það er að fara að greina þinn program á meðan það er verið að keyra 657 00:30:04,980 --> 00:30:07,740 og segja að þú hafir þú leka allir minni og enn betra, 658 00:30:07,740 --> 00:30:10,610 fórstu snerta minni sem ekki tilheyra yður? 659 00:30:10,610 --> 00:30:13,700 Það getur ekki skilið allt, en það er nokkuð góður á smitandi flesta hluti. 660 00:30:13,700 --> 00:30:19,700 >> Svo er hér dæmi um hafa keyrt minn þetta forrit, hafa keyrt Valgrind, 661 00:30:19,700 --> 00:30:21,470 á forrit sem heitir minni, og ég ætla 662 00:30:21,470 --> 00:30:24,730 að varpa ljósi á línur sem eru lokum áhugavert fyrir okkur. 663 00:30:24,730 --> 00:30:27,690 Svo er jafnvel meira truflun það sem ég hef eytt úr glæru. 664 00:30:27,690 --> 00:30:30,930 En við skulum bara sjá hvað þetta program er fær um að segja okkur. 665 00:30:30,930 --> 00:30:34,800 Það er fær um að segja okkur það eins ógilda skrifa stærð 4. 666 00:30:34,800 --> 00:30:38,020 Með öðrum orðum, ef þú snertir minni, sérstaklega 4 bytes af minni 667 00:30:38,020 --> 00:30:40,350 að þú ættir ekki að hafa, Valgrind get sagt þér það. 668 00:30:40,350 --> 00:30:41,660 Ógildur skrifa af stærð 4. 669 00:30:41,660 --> 00:30:43,640 Þú snert fjögur bæti að þú ættir ekki að hafa. 670 00:30:43,640 --> 00:30:44,840 Hvar fékkstu það? 671 00:30:44,840 --> 00:30:45,900 Þetta er fegurð. 672 00:30:45,900 --> 00:30:50,000 Minni punktur c lína 21 er þar sem þú ruglaður upp og það er hvers vegna það er gagnlegt. 673 00:30:50,000 --> 00:30:53,410 Líkt gdb, getur það hjálpað benda þér á the raunverulegur villa. 674 00:30:53,410 --> 00:30:57,170 >> Nú, þetta er aðeins meira fjölorður, ef ekki ruglingslegt. 675 00:30:57,170 --> 00:31:01,307 40 bæti í 1 blokkir eru örugglega glataður í tap skrá 1 af 1. 676 00:31:01,307 --> 00:31:02,140 Hvað þýðir það? 677 00:31:02,140 --> 00:31:05,920 Jæja, það þýðir bara að þú baðst um 40 bytes og þú aldrei fékk hana. 678 00:31:05,920 --> 00:31:08,930 Þú kallaðir malloc eða þú kallaðir GetString og stýrikerfi 679 00:31:08,930 --> 00:31:12,450 gaf þér 40 bytes, en þú aldrei leystur eða út að minni, 680 00:31:12,450 --> 00:31:15,400 og til að vera sanngjarn, höfum við aldrei sýna þú hvernig á að gefa aftur minni. 681 00:31:15,400 --> 00:31:17,910 Skrúfjárn út það er frábær einföld aðgerð kallað frjáls. 682 00:31:17,910 --> 00:31:21,170 Tekur einn rök, málið þú vilt að losa eða gefa til baka, 683 00:31:21,170 --> 00:31:23,430 en 40 bytes, virðist, í þessari áætlun 684 00:31:23,430 --> 00:31:27,300 hafa rofnað á línu 20 minni punktur c. 685 00:31:27,300 --> 00:31:28,650 >> Svo skulum sjá þetta forrit. 686 00:31:28,650 --> 00:31:31,020 Það er frábær gagnslaus. 687 00:31:31,020 --> 00:31:33,980 Það sýnir aðeins þetta tiltekna villa. 688 00:31:33,980 --> 00:31:34,920 Svo skulum taka a líta. 689 00:31:34,920 --> 00:31:39,920 Hér er aðal og helstu, fyrirvarar, símtöl fall sem heitir f og þá skilar. 690 00:31:39,920 --> 00:31:41,550 Svo ekki allt sem áhugavert. 691 00:31:41,550 --> 00:31:42,664 Hvað þýðir F gera? 692 00:31:42,664 --> 00:31:44,330 Tilkynning ég ekki nenna með frumgerð. 693 00:31:44,330 --> 00:31:46,520 Mig langaði til að halda kóðann haldið í lágmarki. 694 00:31:46,520 --> 00:31:49,530 Svo ég setti f ofan main og það er fínt, vissulega, 695 00:31:49,530 --> 00:31:51,500 fyrir stuttu forrit eins og þetta. 696 00:31:51,500 --> 00:31:56,910 Svo, f ekki aftur neitt og gerir ekki taka neitt, en það er að gera þetta. 697 00:31:56,910 --> 00:31:59,620 Það segir, eins í Binky dæmis 698 00:31:59,620 --> 00:32:02,682 bendi heitir x sem er að fara að geyma veffang int. 699 00:32:02,682 --> 00:32:03,890 Svo er að vinstri-hönd hlið. 700 00:32:03,890 --> 00:32:07,230 Á ensku, hvað er Hægra megin að gera? 701 00:32:07,230 --> 00:32:09,770 Einhver? 702 00:32:09,770 --> 00:32:13,665 Hvað er þetta að gera fyrir okkur? 703 00:32:13,665 --> 00:32:14,651 Já? 704 00:32:14,651 --> 00:32:16,623 >> Áhorfendur: [inaudible] sinnum á stærð við int 705 00:32:16,623 --> 00:32:19,175 sem er 10 sinnum að [inaudible] 706 00:32:19,175 --> 00:32:20,800 DAVID Malan: Gott og láta mig draga. 707 00:32:20,800 --> 00:32:25,480 Svo úthluta nóg pláss fyrir 10 heiltölur eða 10, hvað er á stærð við int, 708 00:32:25,480 --> 00:32:29,340 það er fjórum bæti þannig 10 sinnum 4 er 40, þannig að hægra megin sem ég hef 709 00:32:29,340 --> 00:32:33,930 auðkenndum er að gefa mér 40 bæti og geyma veffang fyrstu bæti 710 00:32:33,930 --> 00:32:34,940 í x. 711 00:32:34,940 --> 00:32:38,380 Og nú loks, og hér er þar þetta forrit er þrjótur, það er 712 00:32:38,380 --> 00:32:41,540 athugavert við línu 21 byggist á þeirri rökfræði? 713 00:32:41,540 --> 00:32:45,197 714 00:32:45,197 --> 00:32:46,280 Hvað er athugavert við línu 21? 715 00:32:46,280 --> 00:32:46,780 Já? 716 00:32:46,780 --> 00:32:49,550 Áhorfendur: Þú getur ekki Vísitala inn x [inaudible]. 717 00:32:49,550 --> 00:32:50,300 DAVID Malan: Já. 718 00:32:50,300 --> 00:32:52,270 Ég ætti ekki vísitölu í x eins og þessi. 719 00:32:52,270 --> 00:32:53,850 Svo setningafræðilega, það er allt í lagi. 720 00:32:53,850 --> 00:32:56,990 Hvað er gott er, mikið eins og þú getur meðhöndla nafn fylki 721 00:32:56,990 --> 00:33:01,080 eins og það sé bendi, álíka hægt að meðhöndla bendi eins og það sé 722 00:33:01,080 --> 00:33:06,425 fylki, og svo ég get setningafræðilega , x krappi, segja x krappi eitthvað sem ég 723 00:33:06,425 --> 00:33:07,800 en 10 er erfið. 724 00:33:07,800 --> 00:33:09,096 Hvers vegna? 725 00:33:09,096 --> 00:33:10,910 >> Áhorfendur: Vegna þess að það er ekki inni. 726 00:33:10,910 --> 00:33:12,390 >> DAVID Malan: Það er ekki inni að klumpur af minni. 727 00:33:12,390 --> 00:33:15,306 Hvað er stærsta gildi sem ég ætti að setja í þá hornklofum? 728 00:33:15,306 --> 00:33:16,870 9, 0 til 9. 729 00:33:16,870 --> 00:33:18,160 Vegna núll flokkun. 730 00:33:18,160 --> 00:33:20,190 Svo 0 til 9 væri fínt. 731 00:33:20,190 --> 00:33:23,960 Bracket 10 er ekki gott og en muna þó, í hvert skipti 732 00:33:23,960 --> 00:33:27,017 Ég virðist reyna að gera CS50 IDE hrun með því að slá í svikinn gildi, 733 00:33:27,017 --> 00:33:29,100 það er ekki alltaf að vinna, og örugglega, þú oft 734 00:33:29,100 --> 00:33:31,460 heppinn bara vegna þess að stýrikerfi er ekki 735 00:33:31,460 --> 00:33:35,467 eftir því að þú alltaf svo lítið fara nokkrum klumpur af minni, 736 00:33:35,467 --> 00:33:38,300 því þú gist í tæknilega hluti þinn, en meira um það 737 00:33:38,300 --> 00:33:40,940 í stýrikerfi bekknum, og svo eitthvað eins og þetta 738 00:33:40,940 --> 00:33:43,000 gæti mjög auðveldlega farið undetected. 739 00:33:43,000 --> 00:33:48,120 Program er aldrei að fara að hrun stöðugt en kannski einu sinni í stutta stund. 740 00:33:48,120 --> 00:33:50,610 >> Og svo skulum reyna Valgrind á þessu, og hér er 741 00:33:50,610 --> 00:33:52,870 þar sem við munum fá óvart af framleiðslu augnablik. 742 00:33:52,870 --> 00:34:00,810 Svo gera minni Valgrind leka stöðva jafngildir fullri punktur rista minni. 743 00:34:00,810 --> 00:34:03,040 Og hér er ástæðan ég lofa þetta myndi gagntaka. 744 00:34:03,040 --> 00:34:05,700 Hér er það sem Valgrind, hér er það forritari, nokkrum árum ago- 745 00:34:05,700 --> 00:34:08,469 ákvað að það væri góð hugmynd fyrir að framleiðsla að líta út. 746 00:34:08,469 --> 00:34:09,750 Svo skulum vit á þessu. 747 00:34:09,750 --> 00:34:13,120 Svo alla leið á vinstri hönd hlið fyrir neitun góður ástæða 748 00:34:13,120 --> 00:34:16,620 er ferlið ID áætlunarinnar hlaupum bara, einstaka auðkenni 749 00:34:16,620 --> 00:34:18,030 í áætluninni sem við hljóp bara. 750 00:34:18,030 --> 00:34:19,738 Við eytt að frá renna, en það 751 00:34:19,738 --> 00:34:22,190 er sumir gagnlegar upplýsingar hér. 752 00:34:22,190 --> 00:34:24,684 >> Við skulum fletta upp á mjög toppur. 753 00:34:24,684 --> 00:34:25,600 Hér er þar sem við byrjuðum. 754 00:34:25,600 --> 00:34:27,040 Svo það er ekki allt sem mikið framleiðsla. 755 00:34:27,040 --> 00:34:30,429 Hér er það ógilt skrifa af stærð 4 á línu 21. 756 00:34:30,429 --> 00:34:31,760 Jæja, hvað var lína 21? 757 00:34:31,760 --> 00:34:34,500 Line 21 var nákvæmlega þetta og það er vit í 758 00:34:34,500 --> 00:34:37,290 að ég er í gilt skrifa 4 bæti því ég er 759 00:34:37,290 --> 00:34:40,389 reyna að setja þetta heiltala, sem gæti verið hvað sem er, 760 00:34:40,389 --> 00:34:42,370 það gerist bara að vera núll, en ég er að reyna 761 00:34:42,370 --> 00:34:44,940 að setja það á stað sem ekki tilheyra mér. 762 00:34:44,940 --> 00:34:50,900 Þar að auki, niður hér, 40 bæti í einu blokkir eru örugglega glataður í skrá 1. 763 00:34:50,900 --> 00:34:56,500 Það er vegna þess að þegar ég kalla malloc hér, aldrei ég reyndar að losa minni. 764 00:34:56,500 --> 00:34:58,140 >> Og hvernig getum við lagað þetta? 765 00:34:58,140 --> 00:35:02,970 Leyfðu mér að fara á undan og vera svolítið öruggari og gera 9 þar og láta mig hér ókeypis x. 766 00:35:02,970 --> 00:35:04,820 Þetta er nýtt hlutverk í dag. 767 00:35:04,820 --> 00:35:11,520 Ef ég endursýning nú gera minni punktur rista, skulum hlaupa Valgrind á það aftur, 768 00:35:11,520 --> 00:35:14,990 hámarka gluggann minn og ýta á Enter. 769 00:35:14,990 --> 00:35:16,900 Nú, það er gott. 770 00:35:16,900 --> 00:35:19,590 Þeir grafa fagnaðarerindið í öllum þessum framleiðsla. 771 00:35:19,590 --> 00:35:20,810 Allt hrúga blokkir voru frjáls. 772 00:35:20,810 --> 00:35:23,604 Við munum koma aftur til hvað hrúga er, en engar leka eru mögulegar. 773 00:35:23,604 --> 00:35:25,520 Svo er þetta bara annað tól fyrir verkfærasett þinn 774 00:35:25,520 --> 00:35:30,220 sem þú getur byrjað að finna nú villur eins og þessi. 775 00:35:30,220 --> 00:35:34,532 >> En við skulum sjá hvað meira getur farið úrskeiðis hér. 776 00:35:34,532 --> 00:35:38,890 Skulum umskipti nú að reyndar að leysa vandamál. 777 00:35:38,890 --> 00:35:42,440 Sem innskot, ef þetta mun létta a smá rugl eða spennu, 778 00:35:42,440 --> 00:35:43,430 þetta er nú fyndið. 779 00:35:43,430 --> 00:35:46,400 780 00:35:46,400 --> 00:35:46,900 Já. 781 00:35:46,900 --> 00:35:49,040 Það er nokkuð gott. 782 00:35:49,040 --> 00:35:50,890 Vegna ábendingum heimilisföng og netföng 783 00:35:50,890 --> 00:35:53,098 eru yfirleitt með því að venju skrifað með sextánskur. 784 00:35:53,098 --> 00:35:54,650 Ha, ha, þetta er fyndið núna. 785 00:35:54,650 --> 00:35:58,390 Einhvern veginn, þannig að við skulum nú reyndar leysa vandamál. 786 00:35:58,390 --> 00:36:00,840 Þetta hefur verið frábær, frábær lágmark-láréttur flötur svona langt, 787 00:36:00,840 --> 00:36:03,950 og við getum í raun gert gagnlegt hluti með þessum lágu stigi upplýsingar. 788 00:36:03,950 --> 00:36:06,710 >> Þannig að við kynntum nokkrar vikur síðan hugmyndin um fylki. 789 00:36:06,710 --> 00:36:09,177 An array var gott því það er erfitt að hreinsa upp númerið okkar 790 00:36:09,177 --> 00:36:11,760 vegna þess að ef við vildum skrifa program með mörgum nemendum 791 00:36:11,760 --> 00:36:15,270 eða fleiri nöfn og hús og dorms og framhaldsskólar og allt það, 792 00:36:15,270 --> 00:36:19,430 við gætum geymt allt meira hreinlegur inni fylki. 793 00:36:19,430 --> 00:36:23,039 En leggja einn ókostur af fjölda svona langt. 794 00:36:23,039 --> 00:36:26,080 Jafnvel ef þú hefur ekki orðið það sjálfur í forriti, bara dragast, 795 00:36:26,080 --> 00:36:30,870 hvað er slæmt um fjölda, kannski? 796 00:36:30,870 --> 00:36:32,337 Ég heyri sumir muldur. 797 00:36:32,337 --> 00:36:34,170 Áhorfendur: Það er erfitt Til að breyta stærð. 798 00:36:34,170 --> 00:36:36,128 DAVID Malan: Það er erfitt Til að breyta stærð. 799 00:36:36,128 --> 00:36:38,660 Þú getur ekki breytt stærð af fjölda, í raun, í sjálfu 800 00:36:38,660 --> 00:36:43,040 í C. Hægt er að úthluta öðru fylki, færa allt frá gamla 801 00:36:43,040 --> 00:36:45,380 í nýju og nú hafa smá auka pláss, 802 00:36:45,380 --> 00:36:47,469 en það er ekki eins og a tungumál eins og Java eða Python 803 00:36:47,469 --> 00:36:49,760 eða allir tala af öðrum tungumál sem sum ykkar 804 00:36:49,760 --> 00:36:52,070 gætir verið kunnugt hvar þú getur bara haldið að bæta hlutum 805 00:36:52,070 --> 00:36:53,930 Auglýsingin nauseam til loka fylki. 806 00:36:53,930 --> 00:36:57,880 Þegar þú ert með fjölbreytta stærð 6, sem er stærð hennar, 807 00:36:57,880 --> 00:37:01,970 og svo mikið eins og the hugmynd fyrr having a buffer með ákveðinni stærð, 808 00:37:01,970 --> 00:37:05,940 þú þarft að giska út af the hlið hvaða stærð þú vilt það til að vera? 809 00:37:05,940 --> 00:37:07,880 Ef þú giska of stór, þú ert að sóa pláss. 810 00:37:07,880 --> 00:37:10,950 Ef þú giska of lítill, þú er ekki hægt að geyma þessi gögn, að minnsta kosti 811 00:37:10,950 --> 00:37:12,940 án mikið meiri vinnu. 812 00:37:12,940 --> 00:37:18,180 >> Svo í dag, þökk sé ábendingum, við getum byrja sauma saman eiga siðvenja okkar 813 00:37:18,180 --> 00:37:20,989 gögn uppbygging, og í Staðreyndin, hér er eitthvað 814 00:37:20,989 --> 00:37:23,030 sem lítur svolítið meira dulinn við fyrstu sýn, 815 00:37:23,030 --> 00:37:26,440 en þetta er það sem við munum kalla tengdur lista, og nafn einskonar þess samantekt 816 00:37:26,440 --> 00:37:26,940 það. 817 00:37:26,940 --> 00:37:29,550 Það er listi yfir númer, eða í þetta mál, lista af tölum, 818 00:37:29,550 --> 00:37:33,480 en það gæti verið listi yfir neinu, en það er tengt saman með því að örvum, 819 00:37:33,480 --> 00:37:36,380 og bara taka giska með hvað tækni 820 00:37:36,380 --> 00:37:38,310 við erum að fara að vera fær um að sauma saman, 821 00:37:38,310 --> 00:37:42,540 tegund af eins popp með þráð, tengdur listi ferhyrninga hér? 822 00:37:42,540 --> 00:37:43,936 Tölur þess? 823 00:37:43,936 --> 00:37:45,560 Hvað er undirliggjandi tungumál eiginleiki? 824 00:37:45,560 --> 00:37:46,350 >> Áhorfendur: A bendi. 825 00:37:46,350 --> 00:37:47,308 >> DAVID Malan: A bendi. 826 00:37:47,308 --> 00:37:51,700 Svo að hver af þessum örvum hér táknar bendi eða bara netfang. 827 00:37:51,700 --> 00:37:54,590 Svo í öðrum orðum, ef ég vil til að geyma lista yfir númer, 828 00:37:54,590 --> 00:37:59,040 Ég get ekki bara geyma það ef ég vil getu til að vaxa og skreppa 829 00:37:59,040 --> 00:38:00,990 gögn uppbygging mín í fylki. 830 00:38:00,990 --> 00:38:03,000 Þannig að ég þarf að hafa smá meira fágun, 831 00:38:03,000 --> 00:38:05,720 en eftir því að þetta mynd konar bendir 832 00:38:05,720 --> 00:38:08,650 að ef þú átt bara smá þræði tengja allt saman, 833 00:38:08,650 --> 00:38:13,100 sennilega er ekki það erfitt að gera pláss á milli tveggja af þeim rétthyrninga 834 00:38:13,100 --> 00:38:16,750 eða tveir af þeim hnúta, eins og við munum byrja kalla þá, setja í nýjan hnút, 835 00:38:16,750 --> 00:38:19,547 og þá með nokkrum nýjum þræði, bara skurður þrjú hnúta saman, 836 00:38:19,547 --> 00:38:22,880 sá fyrsti, það síðasta, og sá að þú sett bara inn í miðju. 837 00:38:22,880 --> 00:38:26,000 >> Og örugglega tengda listanum, ólíkt fylki, er síbreytilegt. 838 00:38:26,000 --> 00:38:27,840 Getur það að vaxa og það getur skreppa og þú þarft ekki 839 00:38:27,840 --> 00:38:32,434 að vita eða sjá fyrirfram hvernig mikið af gögnum sem þú ert að fara að vera að geyma, 840 00:38:32,434 --> 00:38:35,600 en það kemur í ljós að við verðum að vera svolítið varkár um hvernig á að framkvæma þetta. 841 00:38:35,600 --> 00:38:39,070 Svo fyrst skulum íhuga hvernig við innleiða einn af þessum litlu rétthyrninga. 842 00:38:39,070 --> 00:38:40,690 Það er auðvelt að hrinda í framkvæmd int. 843 00:38:40,690 --> 00:38:44,000 Þú segir bara int n og síðan þú færð 4 bæti fyrir int, 844 00:38:44,000 --> 00:38:49,089 en hvernig fæ ég int, kalla það n, og þá bendi, við skulum kalla það næsta. 845 00:38:49,089 --> 00:38:50,880 Við gætum hringt þessir það eitthvað sem við viljum 846 00:38:50,880 --> 00:38:53,590 en ég þarf sérsniðin gögn uppbygging. 847 00:38:53,590 --> 00:38:54,257 Já? 848 00:38:54,257 --> 00:38:57,020 >> Áhorfendur: Merkið [inaudible]. 849 00:38:57,020 --> 00:39:00,940 >> DAVID Malan: Svo merkið við munum nota til að fá veffang hnút hugsanlega. 850 00:39:00,940 --> 00:39:02,740 En við þurfum annan eiginleiki C, til þess 851 00:39:02,740 --> 00:39:06,700 að gefa mér getu til að búa Þessi siður rétthyrningur, þessi siður 852 00:39:06,700 --> 00:39:08,919 breyta ef þú vilt, í minni. 853 00:39:08,919 --> 00:39:09,710 Áhorfendur: A struct. 854 00:39:09,710 --> 00:39:10,626 DAVID Malan: A struct. 855 00:39:10,626 --> 00:39:14,310 Muna frá síðustu viku, kynnti við struct, þetta tiltölulega einfalt leitarorð 856 00:39:14,310 --> 00:39:16,254 sem leyfir okkur að gera hlutina eins og þetta. 857 00:39:16,254 --> 00:39:18,420 C er ekki kominn með gögn uppbygging kallast nemanda. 858 00:39:18,420 --> 00:39:22,190 Það kemur með int og fljóta og bleikja og svo, en það þýðir ekki að koma með nemanda, 859 00:39:22,190 --> 00:39:26,750 en við getum búið til nemandi gögn tegund, nemandi uppbyggingu, með þessa setningafræði 860 00:39:26,750 --> 00:39:27,250 hér. 861 00:39:27,250 --> 00:39:28,350 Og þú munt sjá þetta aftur og aftur. 862 00:39:28,350 --> 00:39:30,426 Svo ekki hafa áhyggjur óður í minnið leitarorð, 863 00:39:30,426 --> 00:39:33,300 en leitarorðið sem er mikilvægt er bara staðreynd að við sögðum struct 864 00:39:33,300 --> 00:39:37,590 og þá erum við kallað það nemandi og inni námsmanns var nafn og hús 865 00:39:37,590 --> 00:39:39,390 eða dorm eða þess háttar. 866 00:39:39,390 --> 00:39:41,980 >> Og svo nú í dag, við skulum leggja þetta. 867 00:39:41,980 --> 00:39:45,240 Ég hef bætt við nokkrum orðum, en ef ég vil að framkvæma þetta rétthyrningur sem er 868 00:39:45,240 --> 00:39:48,440 fékk bæði int og a músina, þú veist hvað, ég er 869 00:39:48,440 --> 00:39:51,540 að fara að lýsa yfir strúktúr heitir hnút. 870 00:39:51,540 --> 00:39:55,630 Ég er líka, inni af því, að fara að segja að hnút, þetta rétthyrningur, hefur int 871 00:39:55,630 --> 00:39:59,730 og við munum kalla það n og það hefur næstu músina. 872 00:39:59,730 --> 00:40:02,540 Og þetta er svolítið fjölorður, en ef þér finnst um það, 873 00:40:02,540 --> 00:40:07,300 örvarnar sem voru í myndinni í smá stund síðan eru um hvaða gögn tegund? 874 00:40:07,300 --> 00:40:12,330 Þar sem hver þeirra örvum er að benda á hvaða tegund af gögn uppbygging? 875 00:40:12,330 --> 00:40:14,332 Það er ekki að benda bara til int í sjálfu sér. 876 00:40:14,332 --> 00:40:16,165 Það er að benda á að í heild rétthyrnd hlutur 877 00:40:16,165 --> 00:40:18,720 og að rétthyrnd hlutur, við sögðum, er kallað hnút. 878 00:40:18,720 --> 00:40:21,720 Og svo þurfum við að endurkvæmt skilgreina þetta eins 879 00:40:21,720 --> 00:40:26,270 að hnút, eigum við að segja, mun innihalda int kallast n 880 00:40:26,270 --> 00:40:31,070 og bendi heitir næsta og tegund af gögn uppbygging sem 881 00:40:31,070 --> 00:40:35,770 að bendillinn stig er greinilega að fara að vera struct hnút. 882 00:40:35,770 --> 00:40:41,550 >> Svo er þetta óþægilega fjölorður og bara til að vera smámunasamur, 883 00:40:41,550 --> 00:40:44,100 ástæðan fyrir því að við getum ekki bara segja þetta, sem hreinskilnislega 884 00:40:44,100 --> 00:40:46,860 lítur mikið meira læsileg, er vegna þess að muna að C lesið 885 00:40:46,860 --> 00:40:48,710 það toppur til botn, vinstri til hægri. 886 00:40:48,710 --> 00:40:54,120 Það er ekki fyrr en við fáum semíkommu að leitarorðið hnút staðar í raun. 887 00:40:54,120 --> 00:40:57,980 Svo ef við viljum hafa þessa tegund af cyclical tilvísun innan við gögn 888 00:40:57,980 --> 00:41:02,120 uppbyggingu, verðum við að gera þetta, þar sem við segjum strúktúr hnút efst, sem 889 00:41:02,120 --> 00:41:06,770 gefur okkur lengri leið að lýsa þessu hlutur, þá inni við segjum strúktúr hnút, 890 00:41:06,770 --> 00:41:09,560 og þá á mjög síðustu línu við segjum, allt í lagi, C, við the vegur, 891 00:41:09,560 --> 00:41:12,060 bara hringja þetta allt fjandinn hlutur hnút og hætta 892 00:41:12,060 --> 00:41:14,360 nota leitarorð strúktúr öllu leyti. 893 00:41:14,360 --> 00:41:18,030 Svo er þetta bara svona a nokkur dæmi um setningarleg bragð að lokum leyfir okkur að búa 894 00:41:18,030 --> 00:41:21,370 eitthvað sem lítur út nákvæmlega eins og þetta. 895 00:41:21,370 --> 00:41:25,010 >> Þannig að ef við gerum ráð fyrir að við getum framkvæma þetta í C, 896 00:41:25,010 --> 00:41:28,040 Hvernig eigum við að raun byrja að fara yfir þetta? 897 00:41:28,040 --> 00:41:32,360 Jæja, í raun, allt sem við þurfum að gera er að iterate frá vinstri til hægri og bara 898 00:41:32,360 --> 00:41:35,960 konar setja hnúta eða eyða hnúður eða leita að hlutum þar sem við viljum, 899 00:41:35,960 --> 00:41:39,560 en til að gera þetta, við skulum fara á undan og gera það svolítið meira alvöru vegna þess að þetta 900 00:41:39,560 --> 00:41:42,560 hefur verið frábær lágmark-láréttur flötur svona langt. 901 00:41:42,560 --> 00:41:45,700 Myndi einhver bókstaflega eins og að vera fyrstur? 902 00:41:45,700 --> 00:41:46,200 OK. 903 00:41:46,200 --> 00:41:47,092 Komdu upp. 904 00:41:47,092 --> 00:41:47,800 Hvað heitir þú? 905 00:41:47,800 --> 00:41:48,499 >> DAVID: David. 906 00:41:48,499 --> 00:41:49,290 DAVID Malan: David. 907 00:41:49,290 --> 00:41:49,998 Gaman að hitta þig. 908 00:41:49,998 --> 00:41:50,960 Ég líka. 909 00:41:50,960 --> 00:41:52,450 Allt í lagi. 910 00:41:52,450 --> 00:41:53,990 Og við þurfum númer 9. 911 00:41:53,990 --> 00:41:55,240 Ekki eins góð og fyrsta, kannski. 912 00:41:55,240 --> 00:41:56,430 OK, númer 9. 913 00:41:56,430 --> 00:41:59,667 A númer 17, takk. 914 00:41:59,667 --> 00:42:01,000 Leyfðu mér að fara aftur aðeins lengra. 915 00:42:01,000 --> 00:42:03,980 Númer 22, takk, og hvernig væri lengra aftur 916 00:42:03,980 --> 00:42:06,344 ef ég get séð hvaða hendur með öllum ljós eða engin. 917 00:42:06,344 --> 00:42:08,010 Einhver er verið bauðst þarna. 918 00:42:08,010 --> 00:42:08,968 Viltu koma upp? 919 00:42:08,968 --> 00:42:10,450 Framhandlegg er valdi að fara upp. 920 00:42:10,450 --> 00:42:12,340 OK, 17. 921 00:42:12,340 --> 00:42:13,690 22. 922 00:42:13,690 --> 00:42:15,120 26 er að koma niður. 923 00:42:15,120 --> 00:42:18,450 Myndi einhver annar eins og að forcefully-- Komdu upp. 924 00:42:18,450 --> 00:42:21,030 Raunveruleg sjálfboðaliði. 925 00:42:21,030 --> 00:42:23,330 >> Svo mjög fljótt, ef þú krakkar gætu raða 926 00:42:23,330 --> 00:42:26,550 sjálfir líkar bara hnútar á skjánum. 927 00:42:26,550 --> 00:42:27,510 Þakka þér fyrir. 928 00:42:27,510 --> 00:42:29,234 Og þú munt vera 26. 929 00:42:29,234 --> 00:42:30,650 Allt í lagi og fljótur kynning. 930 00:42:30,650 --> 00:42:32,139 Þannig að ég er David og þú ert líka? 931 00:42:32,139 --> 00:42:32,680 DAVID: David. 932 00:42:32,680 --> 00:42:33,721 DAVID Malan: Og þú ert? 933 00:42:33,721 --> 00:42:34,229 Jake: Jake. 934 00:42:34,229 --> 00:42:34,729 Sue: Sue. 935 00:42:34,729 --> 00:42:35,229 ALEX: Alex. 936 00:42:35,229 --> 00:42:36,475 RAPHAEL: Raphael. 937 00:42:36,475 --> 00:42:37,100 TAYLOR: Taylor. 938 00:42:37,100 --> 00:42:37,466 DAVID Malan: Taylor. 939 00:42:37,466 --> 00:42:37,590 Excellent. 940 00:42:37,590 --> 00:42:39,810 Svo þetta eru sjálfboðaliðar okkar fyrir í dag og fara á undan 941 00:42:39,810 --> 00:42:43,090 og skipta smá þannig, og bara fara á undan og halda 942 00:42:43,090 --> 00:42:47,024 halda tölur eins og þú ert eða þinn Fyrsta merki og nota vinstri höndina, 943 00:42:47,024 --> 00:42:48,940 fara á undan og bara framkvæma þessar örvar, bara 944 00:42:48,940 --> 00:42:51,360 þannig að vinstri hönd þín er bókstaflega benda á hvað þú ættir að benda 945 00:42:51,360 --> 00:42:54,610 á, og gefa þér nokkrar herbergið svo að getum við sjónrænt séð handleggina raun 946 00:42:54,610 --> 00:42:58,120 benda, og þú getur bara benda konar á jörðu er í lagi. 947 00:42:58,120 --> 00:43:03,040 >> Svo hér höfum við tengda lista yfir einn, tveir, þrír, fjórir, fimm hnútar í upphafi, 948 00:43:03,040 --> 00:43:05,860 og taka við höfum þetta sérstaka bendillinn í upphafi sem er 949 00:43:05,860 --> 00:43:09,770 lykill vegna þess að við verðum að halda utan af öllu lengd listanum einhvern veginn. 950 00:43:09,770 --> 00:43:13,590 Þessir krakkar, jafnvel þótt þeir séu vinstri til hægri, aftur til baka í minni, 951 00:43:13,590 --> 00:43:15,950 þeir geta í raun verið hvar í minni tölvunnar. 952 00:43:15,950 --> 00:43:18,240 Svo þessir krakkar gætu verið standa hvar sem er á sviðinu 953 00:43:18,240 --> 00:43:20,960 og það er allt í lagi, svo lengi sem þeir eru í raun og veru að benda á annan, 954 00:43:20,960 --> 00:43:22,770 en að halda hreint og einfalt, við munum 955 00:43:22,770 --> 00:43:25,728 bara draga þá vinstri til hægri eins og þetta, en það gæti verið miklu eyður 956 00:43:25,728 --> 00:43:26,790 á milli þessara hnúður. 957 00:43:26,790 --> 00:43:30,710 >> Nú, ef ég vil í raun og veru að setja nokkrar nýtt gildi, við skulum fara á undan og gera þetta. 958 00:43:30,710 --> 00:43:33,720 Við höfum tækifæri núna að velja aðra hnút. 959 00:43:33,720 --> 00:43:39,820 Segja skulum byrja burt með mallocing 55. 960 00:43:39,820 --> 00:43:41,320 Myndi einhver á móti því að malloc? 961 00:43:41,320 --> 00:43:42,280 OK, komdu upp. 962 00:43:42,280 --> 00:43:42,992 Hvað heitir þú? 963 00:43:42,992 --> 00:43:43,700 RAINBOW: Rainbow. 964 00:43:43,700 --> 00:43:44,050 DAVID Malan: Rainbow? 965 00:43:44,050 --> 00:43:44,810 Allt í lagi. 966 00:43:44,810 --> 00:43:46,600 Malloc Rainbow. 967 00:43:46,600 --> 00:43:47,450 Komdu upp. 968 00:43:47,450 --> 00:43:51,610 Svo nú verðum við að spyrja okkur algorithmically þar sem við getum sett 55. 969 00:43:51,610 --> 00:43:53,610 Svo okkur öll vita, augljóslega, þar sem hún líklega 970 00:43:53,610 --> 00:43:55,401 tilheyrir ef við erum að reyna að halda þessu flokkaður 971 00:43:55,401 --> 00:43:58,299 og ef þú krakkar gætu tekið einn stíga til baka þannig að við falla ekki burt 972 00:43:58,299 --> 00:43:59,590 stigi, sem myndi vera frábært. 973 00:43:59,590 --> 00:44:01,420 Svo í raun, Rainbow, byrja hérna með mér, 974 00:44:01,420 --> 00:44:04,200 vegna þess að við sem í tölvunni núna getur aðeins að sjá eina breytu í einu. 975 00:44:04,200 --> 00:44:05,190 Þannig að ef þetta er fyrsta hnút. 976 00:44:05,190 --> 00:44:07,160 Takið hann er ekki hnút, hann er bara músina, 977 00:44:07,160 --> 00:44:10,270 og það er hvers vegna hann er vakin á að vera aðeins á stærð við músina, ekki 978 00:44:10,270 --> 00:44:11,780 einn af þeim fullur rétthyrninga. 979 00:44:11,780 --> 00:44:16,650 Þannig að við erum að fara að athuga hvort á endurtekning er 55 minna en 9? 980 00:44:16,650 --> 00:44:17,150 Nei 981 00:44:17,150 --> 00:44:19,060 Er 55 minna en 17? 982 00:44:19,060 --> 00:44:19,720 Nei 983 00:44:19,720 --> 00:44:20,800 Minna en 22? 984 00:44:20,800 --> 00:44:22,020 Minna en 26? 985 00:44:22,020 --> 00:44:23,390 Minna en 34? 986 00:44:23,390 --> 00:44:25,890 Og svo nú, augljóslega Rainbow tilheyrir í lokin. 987 00:44:25,890 --> 00:44:27,270 Svo til að vera skýr, og það var nafn þitt, Taylor? 988 00:44:27,270 --> 00:44:27,895 >> TAYLOR: Taylor. 989 00:44:27,895 --> 00:44:32,510 DAVID Malan: Svo meðal Taylor vinstri hönd og hendur Rainbow er hér, 990 00:44:32,510 --> 00:44:38,324 Hvers hönd þarf að benda á hvað í Til að setja inn 55 í þennan lista? 991 00:44:38,324 --> 00:44:39,240 Hvað þurfum við að gera? 992 00:44:39,240 --> 00:44:39,700 Já? 993 00:44:39,700 --> 00:44:41,140 >> Áhorfendur: hönd Taylors þarf að benda vinstri. 994 00:44:41,140 --> 00:44:41,680 >> DAVID Malan: Einmitt. 995 00:44:41,680 --> 00:44:43,800 Svo setja hnút í lok listanum 996 00:44:43,800 --> 00:44:47,140 er frekar einfalt því Taylor bara Benda verður, í stað þess að í jörðina 997 00:44:47,140 --> 00:44:49,640 eða við munum kalla það null, null er tegund af fjarveru 998 00:44:49,640 --> 00:44:51,640 á músina eða sérstakt núll músina, þú ert 999 00:44:51,640 --> 00:44:53,740 að fara að benda með vinstri hönd á Rainbow og þá Rainbow, 1000 00:44:53,740 --> 00:44:55,910 þar ætti vinstri hönd benda líklega? 1001 00:44:55,910 --> 00:44:56,570 Niður. 1002 00:44:56,570 --> 00:45:00,140 Það er ekki gott ef hönd hennar er tegund að benda á hér eða svoleiðis eitthvað 1003 00:45:00,140 --> 00:45:00,640 sem leið. 1004 00:45:00,640 --> 00:45:02,407 Sem myndi teljast sorp gildi, 1005 00:45:02,407 --> 00:45:04,240 en ef hún bendir til sumir þekkt gildi, munum við 1006 00:45:04,240 --> 00:45:07,360 kalla það núll eða null, það er allt í lagi vegna þess að við höfum tíma í þetta 1007 00:45:07,360 --> 00:45:09,390 og við vitum að listi er nú lokið. 1008 00:45:09,390 --> 00:45:11,550 >> Svo er það annað tiltölulega einfalt mál? 1009 00:45:11,550 --> 00:45:13,125 Gætum við malloc 5? 1010 00:45:13,125 --> 00:45:14,010 Komdu upp. 1011 00:45:14,010 --> 00:45:14,782 Hvað heitir þú? 1012 00:45:14,782 --> 00:45:15,490 TIFFANY: Tiffany. 1013 00:45:15,490 --> 00:45:16,000 DAVID Malan: Fyrirgefðu? 1014 00:45:16,000 --> 00:45:16,470 TIFFANY: Tiffany. 1015 00:45:16,470 --> 00:45:16,880 DAVID Malan: Tiffany. 1016 00:45:16,880 --> 00:45:17,110 Allt í lagi. 1017 00:45:17,110 --> 00:45:19,071 Tiffany hefur verið malloced með gildi 5. 1018 00:45:19,071 --> 00:45:19,570 Komdu upp. 1019 00:45:19,570 --> 00:45:23,820 This einn er tiltölulega auðvelt líka, en við skulum íhuga röð aðgerða nú. 1020 00:45:23,820 --> 00:45:25,820 Það var frekar auðvelt við Taylor í lokin. 1021 00:45:25,820 --> 00:45:30,302 Fjöldi 5 er að sjálfsögðu minna en 9, og svo höfum við Davíð, höfum við Tiffany, 1022 00:45:30,302 --> 00:45:31,260 og hvað var nafnið þitt? 1023 00:45:31,260 --> 00:45:31,680 >> Jake: Jake. 1024 00:45:31,680 --> 00:45:32,470 >> DAVID Malan: Jake. 1025 00:45:32,470 --> 00:45:34,300 Tiffany, Jake, og David. 1026 00:45:34,300 --> 00:45:36,580 Hvers hönd skal uppfæra fyrst? 1027 00:45:36,580 --> 00:45:39,260 1028 00:45:39,260 --> 00:45:40,590 Hvað viltu gera hér? 1029 00:45:40,590 --> 00:45:45,244 There er a par mögulegar leiðir, en það er einnig einn eða fleiri röng leiðir. 1030 00:45:45,244 --> 00:45:46,620 >> Áhorfendur: Byrja með lengst til vinstri. 1031 00:45:46,620 --> 00:45:47,800 >> DAVID Malan: Byrja með lengst til vinstri. 1032 00:45:47,800 --> 00:45:49,008 Hver er lengst til vinstri hér þá? 1033 00:45:49,008 --> 00:45:49,700 Áhorfendur: First. 1034 00:45:49,700 --> 00:45:50,366 >> DAVID Malan: OK. 1035 00:45:50,366 --> 00:45:53,781 Svo byrja með fyrst og hvar þú langar að uppfæra hendur Davíðs til að vera? 1036 00:45:53,781 --> 00:45:54,780 Áhorfendur: Undir 5. 1037 00:45:54,780 --> 00:45:55,446 DAVID Malan: OK. 1038 00:45:55,446 --> 00:45:59,026 Svo David, benda á fimm eða Tiffany hér og nú? 1039 00:45:59,026 --> 00:46:01,072 >> Áhorfendur: Tiffany bendir til 9? 1040 00:46:01,072 --> 00:46:04,030 DAVID Malan: Perfect, nema Binky er yfirmaður bara svona datt af, ekki satt? 1041 00:46:04,030 --> 00:46:06,820 Vegna þess að það er rangt með þessi mynd bókstaflega? 1042 00:46:06,820 --> 00:46:08,070 Áhorfendur: Ekkert bendir. 1043 00:46:08,070 --> 00:46:09,945 DAVID Malan: Ekkert er benda til Jake núna. 1044 00:46:09,945 --> 00:46:13,360 Við höfum bókstaflega munaðarlaus 9 og 17, og við höfum bókstaflega 1045 00:46:13,360 --> 00:46:18,450 leki allan minni, vegna þess að með uppfæra hönd Davíðs fyrst, það er 1046 00:46:18,450 --> 00:46:21,660 fínn svo miklu leyti sem það er rétt benda á Holtinu núna, 1047 00:46:21,660 --> 00:46:25,410 en ef enginn hafði framsýni til að benda á Jake, 1048 00:46:25,410 --> 00:46:27,490 þá höfum við misst heild á þeim lista. 1049 00:46:27,490 --> 00:46:28,200 Svo skulum losa. 1050 00:46:28,200 --> 00:46:30,950 Svo það var gott að ferð yfir en við skulum leiðrétta núna. 1051 00:46:30,950 --> 00:46:33,624 Hvað ættum við að gera fyrst í stað? 1052 00:46:33,624 --> 00:46:34,124 Já? 1053 00:46:34,124 --> 00:46:35,791 >> Áhorfendur: Tiffany að benda á 9? 1054 00:46:35,791 --> 00:46:37,582 DAVID Malan: Ég get ekki fá að nærri þér. 1055 00:46:37,582 --> 00:46:38,720 Hver ætti að benda á 9? 1056 00:46:38,720 --> 00:46:39,220 >> Áhorfendur: Tiffany. 1057 00:46:39,220 --> 00:46:39,390 >> DAVID Malan: Allt í lagi. 1058 00:46:39,390 --> 00:46:41,200 Svo Tiffany ætti fyrst benda á 9. 1059 00:46:41,200 --> 00:46:43,550 Svo Tiffany ætti að taka á eins verðmæti 1060 00:46:43,550 --> 00:46:45,820 Davíð, sem virðist óþarfi um stund, 1061 00:46:45,820 --> 00:46:48,820 en það er allt í lagi því nú, annað skref, getum við að uppfæra hönd Davíðs 1062 00:46:48,820 --> 00:46:52,680 að benda á Holtinu, og þá ef Við bara hreinum það upp 1063 00:46:52,680 --> 00:46:55,740 eins og þetta er góður af vor-eins, nú það er rétt innsetning. 1064 00:46:55,740 --> 00:46:56,700 Svo frábært. 1065 00:46:56,700 --> 00:46:57,970 Svo nú erum við næstum þar. 1066 00:46:57,970 --> 00:47:01,075 Við skulum setja eina final gildi eins verðmæti 20. 1067 00:47:01,075 --> 00:47:03,010 Ef við gætum malloc lokatilraun sjálfboðaliða? 1068 00:47:03,010 --> 00:47:04,140 Komdu upp. 1069 00:47:04,140 --> 00:47:06,224 Svo er þetta aðeins meira erfiður. 1070 00:47:06,224 --> 00:47:08,390 En í raun, kóðinn við erum skrifa, að vísu munnlega, 1071 00:47:08,390 --> 00:47:10,610 er bara eins og að hafa fullt af ef aðstæður nú, ekki satt? 1072 00:47:10,610 --> 00:47:12,318 Við höfðum ástand stöðva ef það tilheyrir 1073 00:47:12,318 --> 00:47:13,840 í lok, kannski í upphafi. 1074 00:47:13,840 --> 00:47:15,940 Við þurfum einhvers konar lykkju til finna blettur í miðjunni. 1075 00:47:15,940 --> 00:47:17,400 Svo skulum gera það með hvað er nafnið þitt? 1076 00:47:17,400 --> 00:47:17,700 >> ERIC: Eric. 1077 00:47:17,700 --> 00:47:18,340 >> DAVID Malan: Eric? 1078 00:47:18,340 --> 00:47:18,660 Eric. 1079 00:47:18,660 --> 00:47:19,368 Gaman að hitta þig. 1080 00:47:19,368 --> 00:47:20,490 Þannig að við höfum 20. 1081 00:47:20,490 --> 00:47:21,220 Minna en fimm? 1082 00:47:21,220 --> 00:47:21,530 Nei 1083 00:47:21,530 --> 00:47:22,160 Minna en níu? 1084 00:47:22,160 --> 00:47:22,410 Nei 1085 00:47:22,410 --> 00:47:23,050 Minna en 17? 1086 00:47:23,050 --> 00:47:23,550 Nei 1087 00:47:23,550 --> 00:47:23,740 OK. 1088 00:47:23,740 --> 00:47:25,701 Hann tilheyrir hér og nöfn eru aftur? 1089 00:47:25,701 --> 00:47:26,200 Sue: Sue. 1090 00:47:26,200 --> 00:47:26,880 DAVID Malan: Sue. 1091 00:47:26,880 --> 00:47:27,379 ALEX: Alex. 1092 00:47:27,379 --> 00:47:28,790 DAVID Malan: Sue, Alex, og? 1093 00:47:28,790 --> 00:47:29,290 ERIC: Eric. 1094 00:47:29,290 --> 00:47:30,120 DAVID Malan: Eric. 1095 00:47:30,120 --> 00:47:32,140 Hvers hendur þarf til að fá uppfærða fyrst? 1096 00:47:32,140 --> 00:47:32,930 >> Áhorfendur: Eric. 1097 00:47:32,930 --> 00:47:33,429 OK. 1098 00:47:33,429 --> 00:47:35,200 Svo Eric er að benda á hvar? 1099 00:47:35,200 --> 00:47:35,930 Á 22.. 1100 00:47:35,930 --> 00:47:36,430 Good. 1101 00:47:36,430 --> 00:47:38,180 Og nú er það næst? 1102 00:47:38,180 --> 00:47:40,800 Sue getur þá benda á Eric og nú, ef ykkur bara 1103 00:47:40,800 --> 00:47:44,077 gera nokkurt svigrúm, sem er fínn sjónrænt, nú höfum við gert innsetningu. 1104 00:47:44,077 --> 00:47:47,160 Svo skulum nú íhuga spurningu en þakka þér svo mikið fyrir sjálfboðaliða okkar. 1105 00:47:47,160 --> 00:47:48,090 Mjög vel gert. 1106 00:47:48,090 --> 00:47:50,831 Þú getur haldið þeim, ef þú vilt. 1107 00:47:50,831 --> 00:47:54,140 Og við höfum yndislega skilnaði gjöf ef þú vilt hvert eins og til að taka streitu boltanum. 1108 00:47:54,140 --> 00:47:56,030 Leyfðu mér að fara bara þetta niður. 1109 00:47:56,030 --> 00:47:58,430 Svo er það takeaway þetta? 1110 00:47:58,430 --> 00:48:02,430 Þetta virðist vera ótrúlega að því marki sem við höfum nú 1111 00:48:02,430 --> 00:48:06,360 kynnt aðra möguleika en array sem er ekki svo bundinn 1112 00:48:06,360 --> 00:48:07,780 til fjölda einhverjum fasta stærð. 1113 00:48:07,780 --> 00:48:09,380 Þeir geta vaxið mjög virk. 1114 00:48:09,380 --> 00:48:13,220 >> En mikið eins og við höfum séð í vikum framhjá, fáum við aldrei neitt fyrir frjáls, 1115 00:48:13,220 --> 00:48:15,740 eins vafalaust er það málamiðlun hér. 1116 00:48:15,740 --> 00:48:18,890 Svo með kosti af tengdur lista, er þetta kraft? 1117 00:48:18,890 --> 00:48:21,590 Þessi hæfileiki til að vaxa og hreinskilnislega, við hefðum getað gert Eyða 1118 00:48:21,590 --> 00:48:23,570 og við gætum skreppa eftir þörfum. 1119 00:48:23,570 --> 00:48:24,710 Hvaða verð erum við að borga? 1120 00:48:24,710 --> 00:48:28,510 1121 00:48:28,510 --> 00:48:30,340 Tvisvar eins mikið pláss, fyrst af öllu. 1122 00:48:30,340 --> 00:48:34,010 Ef þú horfir á myndina, ekki lengur ég geyma lista yfir heiltölur. 1123 00:48:34,010 --> 00:48:36,740 Ég er að geyma lista yfir heiltölur auk ábendingum. 1124 00:48:36,740 --> 00:48:38,240 Þannig að ég ætla að tvöfalda pláss. 1125 00:48:38,240 --> 00:48:40,740 Nú, kannski er það ekki svo stór samningur 4 bytes, 8 bytes, 1126 00:48:40,740 --> 00:48:43,160 en það gæti vissulega bæta upp fyrir stóra gagnagrunna. 1127 00:48:43,160 --> 00:48:45,570 Hvað er annað hæðir? 1128 00:48:45,570 --> 00:48:46,070 Já? 1129 00:48:46,070 --> 00:48:48,010 >> Áhorfendur: Við verðum að fara yfir þá einn-fyrir-einn. 1130 00:48:48,010 --> 00:48:48,760 DAVID Malan: Já. 1131 00:48:48,760 --> 00:48:50,260 Við verðum að fara yfir þá einn-fyrir-einn. 1132 00:48:50,260 --> 00:48:53,860 Þú veist hvað, við gáfum upp þetta frábær þægilegt eiginleiki hornklofi 1133 00:48:53,860 --> 00:48:57,240 merki, meira rétt þekktur sem Random Access, 1134 00:48:57,240 --> 00:48:59,280 þar sem við getum bara hoppa til manns frumefni 1135 00:48:59,280 --> 00:49:01,470 en nú ef ég hefði enn sjálfboðaliðar mínum hér, 1136 00:49:01,470 --> 00:49:04,660 ef ég vildi finna númer 22, ég get ekki bara 1137 00:49:04,660 --> 00:49:06,620 hoppa til krappi eitthvað eitthvað. 1138 00:49:06,620 --> 00:49:10,530 Ég verð að líta yfir listann mikið eins og að leita dæmin línulega, 1139 00:49:10,530 --> 00:49:12,260 að finna númerið 22. 1140 00:49:12,260 --> 00:49:14,340 Þannig að við virðast hafa greitt verð þar. 1141 00:49:14,340 --> 00:49:16,430 En við getum samt leysa önnur vandamál. 1142 00:49:16,430 --> 00:49:18,587 >> Í raun, láta mig kynna bara nokkra myndefni. 1143 00:49:18,587 --> 00:49:20,920 Svo ef þú hefur verið niður Mather er matsal nýlega, 1144 00:49:20,920 --> 00:49:23,320 þú munt muna að þeirra stafla af stæði eins og þetta, 1145 00:49:23,320 --> 00:49:26,300 við láni þetta frá Annenberg áður bekknum. 1146 00:49:26,300 --> 00:49:28,930 Þannig að þetta stafla af stæði, þó, er fulltrúi í raun 1147 00:49:28,930 --> 00:49:30,860 af tölvunarfræði gögn uppbygging. 1148 00:49:30,860 --> 00:49:32,910 Það er gögn uppbygging í tölvunarfræði 1149 00:49:32,910 --> 00:49:38,010 þekktur sem stafla sem mjög fallega lánar sig til nákvæmlega þetta sjón. 1150 00:49:38,010 --> 00:49:41,380 Þannig að ef öllum þessum stæði er ekki bakki en eins mörgum og ég vildi 1151 00:49:41,380 --> 00:49:45,010 að geyma tölur, ég gæti sett einn niður hér, 1152 00:49:45,010 --> 00:49:48,320 og ég gæti sett annað hérna, og halda áfram stöflun tölur 1153 00:49:48,320 --> 00:49:53,180 hvor ofan á öðrum, og því sem er hugsanlega gagnlegt um þetta 1154 00:49:53,180 --> 00:49:55,450 er að það er óbeint af þessum gögnum uppbyggingu? 1155 00:49:55,450 --> 00:49:58,045 Sem tala get ég draga út Fyrsta hentugast? 1156 00:49:58,045 --> 00:50:00,640 1157 00:50:00,640 --> 00:50:03,030 The nýlega einn setja á það. 1158 00:50:03,030 --> 00:50:06,430 >> Svo er þetta það sem við myndum kalla í tölvunarfræði a LIFO gögn uppbygging. 1159 00:50:06,430 --> 00:50:08,070 Endast í, fyrst út. 1160 00:50:08,070 --> 00:50:10,800 Og við munum sjá áður en langt hvers vegna sem gæti verið gagnlegt en nú, 1161 00:50:10,800 --> 00:50:12,200 bara íhuga eign. 1162 00:50:12,200 --> 00:50:15,158 Og það er góður af heimskur ef þú heldur um hvernig matsalur gerir það. 1163 00:50:15,158 --> 00:50:17,910 Í hvert skipti sem þeir hreinsa stæði og setja ferskasta sjálfur ofan, 1164 00:50:17,910 --> 00:50:22,160 þú gætir hafa a áður hreint en á endanum mjög óhrein og rykugum 1165 00:50:22,160 --> 00:50:24,360 bakki á mjög neðst ef þú aldrei 1166 00:50:24,360 --> 00:50:26,820 fá til the botn af því stafla, vegna þess að þú bara 1167 00:50:26,820 --> 00:50:29,380 halda að setja nýja og hreinn sjálfur ofan á það. 1168 00:50:29,380 --> 00:50:31,840 Það sama gæti gerst í matvörubúð líka. 1169 00:50:31,840 --> 00:50:35,450 Ef þú ert með skjáinn mál af mjólk og í hvert skipti CVS 1170 00:50:35,450 --> 00:50:37,610 eða sá fær meiri mjólk, þú shove bara mjólkur 1171 00:50:37,610 --> 00:50:39,880 þú ert nú þegar að baki og þú setur nýjar upp að framan, 1172 00:50:39,880 --> 00:50:43,088 þú ert að fara að hafa sumir laglegur viðbjóðslegur mjólk í lok gögn uppbygging, 1173 00:50:43,088 --> 00:50:46,390 vegna þess að það er alltaf neðst eða equivalently er það alltaf á bak. 1174 00:50:46,390 --> 00:50:50,407 >> En það er önnur leið til að hugsa um undirbúa gögn og til dæmis, þetta. 1175 00:50:50,407 --> 00:50:53,490 Ef þú ert einn af þeim sem finnst til að stilla upp fyrir utan Apple verslanir 1176 00:50:53,490 --> 00:50:55,610 þegar ný vara kemur út, þú ert líklega 1177 00:50:55,610 --> 00:50:58,780 ekki með stafla gögn uppbygging vegna þess að þú 1178 00:50:58,780 --> 00:51:03,070 myndi einangra allir aðrir sem er að undirbúa að kaupa nokkrar nýjar leikfang. 1179 00:51:03,070 --> 00:51:06,610 Frekar, þú ert líklega að nota hvers konar gögn uppbygging 1180 00:51:06,610 --> 00:51:10,050 eða hvers konar kerfi í hinum raunverulega heimi? 1181 00:51:10,050 --> 00:51:13,493 Vonandi er það lína, eða meira rétt eða meira British-eins, biðröð. 1182 00:51:13,493 --> 00:51:17,700 Og það kemur í ljós biðröð er einnig gögn uppbygging í tölvunarfræði, 1183 00:51:17,700 --> 00:51:19,700 en biðröð hefur mjög öðruvísi eign. 1184 00:51:19,700 --> 00:51:20,820 Það er ekki LIFO. 1185 00:51:20,820 --> 00:51:21,990 Endast í, fyrst út. 1186 00:51:21,990 --> 00:51:22,800 Guð forði. 1187 00:51:22,800 --> 00:51:24,280 Það er í staðinn FIFO. 1188 00:51:24,280 --> 00:51:26,110 Fyrst inn fyrst út. 1189 00:51:26,110 --> 00:51:27,970 Og það er gott fyrir sanngirni sakir 1190 00:51:27,970 --> 00:51:30,428 vissulega þegar þú ert að undirbúa upp frábær snemma í morgun. 1191 00:51:30,428 --> 00:51:33,400 Ef þú færð það fyrst, þú vilt fá út fyrst eins og heilbrigður. 1192 00:51:33,400 --> 00:51:35,880 >> Og svo öll þessi gögn mannvirki, biðraðir og stafla 1193 00:51:35,880 --> 00:51:39,220 og bunches annarra, kemur í ljós þér getur hugsað þetta eins og bara fylki. 1194 00:51:39,220 --> 00:51:41,820 Þetta er fylki, kannski föst stærð 4, en það væri 1195 00:51:41,820 --> 00:51:44,990 vera góður af gaman ef við gætum bara stafli stæði nánast óendanlega mikill ef við 1196 00:51:44,990 --> 00:51:46,780 hafa að margir stæði eða númer. 1197 00:51:46,780 --> 00:51:48,840 Svo kannski að við viljum nota tengda lista hér, 1198 00:51:48,840 --> 00:51:51,800 en málamiðlun er að fara að vera hugsanlega að við þurfum meira minni, 1199 00:51:51,800 --> 00:51:55,930 tekur smá meiri tíma en við takmarka ekki hæð stafla, 1200 00:51:55,930 --> 00:51:59,550 líkt Mather er skjánum að ræða getur takmarkað stærð af stafla, 1201 00:51:59,550 --> 00:52:03,117 og svo þetta eru hönnun ákvarðanir eða möguleikar í boði fyrir okkur á endanum. 1202 00:52:03,117 --> 00:52:04,950 Svo með þessi gögn mannvirki, við höfum byrjað 1203 00:52:04,950 --> 00:52:09,360 sjá nýjar efri mörk hugsanlega á því sem áður var frábær fljótur 1204 00:52:09,360 --> 00:52:11,260 og þar sem við munum fara burt í dag og þar 1205 00:52:11,260 --> 00:52:13,200 við munum vonast til að fá að er á miðvikudag, við munum 1206 00:52:13,200 --> 00:52:15,740 byrja að líta á gögn uppbygging sem leyfir okkur að leita 1207 00:52:15,740 --> 00:52:18,260 gegnum gögn í log lokatíma aftur. 1208 00:52:18,260 --> 00:52:21,470 Og við sáum að muna, í viku núll og einn með tvöfaldur leit eða skipta 1209 00:52:21,470 --> 00:52:22,180 og sigra. 1210 00:52:22,180 --> 00:52:26,240 Það er að koma til baka og enn betra, Gral fyrir þetta miðvikudag 1211 00:52:26,240 --> 00:52:29,510 verður að koma upp með gagnagrind sem keyrir sannarlega 1212 00:52:29,510 --> 00:52:32,070 eða fræðilega föstu tíma, þar 1213 00:52:32,070 --> 00:52:34,760 það skiptir ekki máli hversu margir milljónir eða milljarða hlutur 1214 00:52:34,760 --> 00:52:38,470 við höfum í gögn uppbygging, það mun taka okkur stöðugt tíma, kannski eitt skref 1215 00:52:38,470 --> 00:52:41,387 eða tvö skref eða 10 skref, en stöðug tölur skrefum 1216 00:52:41,387 --> 00:52:42,970 til að leita í gegnum þessi gögn uppbygging. 1217 00:52:42,970 --> 00:52:46,300 Að örugglega verður Gral en meira um það á miðvikudag. 1218 00:52:46,300 --> 00:52:49,045 Sjáumst þá. 1219 00:52:49,045 --> 00:52:53,704 >> [TÓNLIST spila] 1220 00:52:53,704 --> 00:56:08,448