[Music kucheza] [VIDEO avspelning] Hapo ni uongo. -Kuhusu nini? -Sijui. -Basi Je, sisi kujua? -yaani Katika 9:15, Ray Santoya alikuwa katika ATM. -Yeah. Hivyo swali ni, nini yeye kufanya katika 9:16? -Shooting 9 millimeter katika kitu. Labda aliona sniper. -au Alikuwa akifanya kazi pamoja naye. -Wait. Kurudi nyuma moja. -Nini Do you see? -Bring Uso wake up screen kamili. -His Glasi. -Kuna Kutafakari. -Ni Nuevitas baseball timu. Hiyo ni alama zao. -Na Yeye kuzungumza kwa yeyote amevaa koti kwamba. [Mwisho avspelning] DAVID Malan: zote haki. Hii ni CS50 na hii ni kidogo zaidi ya [inaudible] na ambayo uko dabbling na tatizo kuweka minne. Leo tunaanza kwa kuangalia kidogo zaidi undani katika mambo haya kuitwa kuyatumia, ambayo hata kama ni mada pretty arcane, zinageuka kuwa itakuja kuwa njia ambayo sisi Unaweza kuanza kujenga na kukusanyika mipango zaidi ya kisasa. Lakini sisi alifanya hivyo siku ya Jumatano iliyopita kwa njia ya baadhi claymation kwanza. Hivyo hii, kukumbuka, ni Binky na sisi alimtumia kwa kuangalia mpango kwamba si kweli kufanya kitu chochote kuvutia, lakini haikuwa yatangaza matatizo machache. Hivyo kuanza leo, kwa nini sio sisi kutembea haraka kwa njia chache ya hatua hizi, kujaribu distill katika maisha ya binadamu ya nini hasa kinaendelea hapa na kwa nini hii ni mbaya, na kisha kuondoka na kwa kweli kuanza kujenga kitu na mbinu hii? Hivyo hawa ndio kwanza mistari miwili katika mpango huu na katika suala layman, nini ni mistari hizi mbili kufanya? Mtu ambaye ni sababu ya starehe kwa nini alitangaza kwenye screen? Je, ni mistari hizi mbili kufanya? Siyo kila kitu tofauti na wiki moja, lakini kuna baadhi ya mwezi alama maalum. Yeah? Huko nyuma. Watazamaji: Kutangaza kuyatumia? DAVID Malan: Sema tena? Watazamaji: Kutangaza kuyatumia? DAVID Malan: Kutangaza kuyatumia na hebu kuboresha yake kidogo zaidi. Watazamaji: [inaudible] anuani x na kisha y. DAVID Malan: Na kisha kushughulikia. Hivyo hasa nini sisi ni kufanya ni sisi ni kutangaza vigezo wawili. Vigezo hivi, ingawa, ni kwenda kuwa wa aina int nyota, ambayo zaidi hasa maana yake ni wao ni kwenda kuhifadhi pepe ya int, mtiririko, x na y. Sasa ni pale maadili yoyote? Je, kuna anwani halisi yoyote katika hizi vigezo mbili katika hatua hii katika wakati? Hakuna Ni tu kinachojulikana maadili takataka. Kama huna kweli kuwapa kutofautiana, chochote kilichokuwa katika RAM awali ni kwenda kujaza na zeros na ndio wote wawili wa vigezo hizo. Lakini sisi bado kujua nini hao na kwamba kwenda kuwa muhimu kwa nini Binky waliopotea kichwa chake wiki iliyopita. Hivyo hii ilikuwa claymation mwili wa hii ambapo una vigezo mbili tu, vipande mviringo kidogo ya udongo, kwamba wanaweza kuhifadhi vigezo, lakini kama ilimalizika mishale kupendekeza, wao siyo kweli akizungumzia na mahali popote inayojulikana per se. Hivyo basi tungekuwa na mstari huu, na hii ilikuwa mpya wiki iliyopita, malloc kwa kumbukumbu mgao, ambayo ni njia tu ya dhana ya kuwaambia mfumo wa uendeshaji, Linux au Mac OS au Windows, hey, nipe baadhi ya kumbukumbu, na wote una kuwaambia mfumo wa uendeshaji ni nini wakati kuuliza ni kwa ajili ya kumbukumbu. Ni si kwenda kwa huduma ya kile wewe ni kwenda kufanya na hayo, lakini huna haja ya kuwaambia uendeshaji mfumo kile kwa njia ya malloc. Yeah? Watazamaji: Ni kiasi gani? DAVID Malan: Ni kiasi gani? Kiasi gani katika ka, na hivyo, hii, tena, mfano contrived, ni kusema tu, nipe ukubwa wa int. Sasa, ukubwa wa int ni ka nne au 32 bits. Hivyo hii ni njia tu ya akisema, hey, mfumo wa uendeshaji, nipe ka nne ya kumbukumbu kwamba naweza kutumia ovyo yangu, na hasa, ni nini malloc kurudi kwa heshima kwa kuwa chunk ya ka nne? Watazamaji: Mitaani? DAVID Malan: mahali. Pepe ya kwamba chunk ya ka nne. Hasa. Na hivyo kwamba ni nini kuhifadhiwa hatimaye katika x na hii ndiyo sababu sisi si kweli huduma ya kile idadi ya kwamba anuani ni, kama ni OX1 au OX2 au baadhi cryptic hexadecimal mahali. Sisi tu huduma pictorially kuwa kwamba kutofautiana x ni sasa akizungumzia kwamba chunk ya kumbukumbu. Hivyo mshale inawakilisha pointer, au zaidi hasa, kumbukumbu ya mahali. Lakini tena, hatuna kawaida huduma nini wale anwani halisi watu. Sasa, mstari huu inasema nini katika suala layman? Star x anapata 42 semicolon. Hii ina maana gani? Unataka kwenda? Je, si scratch shingo yako. Watazamaji: pepe ya x ni katika 42. DAVID Malan: pepe ya x ni katika 42. Si kabisa. Hivyo karibu, lakini si kabisa, kwa sababu kuna nyota hiyo prefixing x huu. Kwa hiyo, tunahitaji tweak kidogo. Yeah? Watazamaji: thamani kwamba pointer x ni akizungumzia ni 42. DAVID Malan: Sawa. Thamani kwamba pointer X ni akizungumzia, hebu sema, atakuwa 42, au kuweka njia nyingine, nyota x anasema, kwenda chochote anuani ni katika x, kama ni 1 Oxford Mitaani au 33 Oxford Street au OX1 au ox33, chochote kwamba numeric anwani ni, nyota x ni dereferencing ya x. Hivyo kwenda kwa anwani hiyo na kisha kuweka namba 42 hapo. Hivyo kwamba itakuwa sawa njia ya kusema kwamba. Hivyo hiyo ni yote mazuri na kisha tunataka kuwakilisha picha kama ifuatavyo ambapo tumekuwa aliongeza 42 kwa kuwa chunk ya nne ka juu ya upande wa kulia, lakini mstari huu ulikuwa ambapo mambo ilikwenda kombo na kichwa Binky ya popped mbali katika hatua hii, kwa sababu mambo mabaya kutokea wakati wewe dereference maadili takataka au wewe dereference batili kuyatumia, na nasema batili kwa sababu katika hatua hii katika hadithi, ni nini ndani ya y? Nini thamani ya y msingi juu ya siku za nyuma hatua chache? Yeah? Nini hiyo? Watazamaji: mahali. DAVID Malan: mahali. Ni lazima anuani lakini mimi initialized hivyo? Hivyo nina bado. Kwa hiyo kile inajulikana kuwa katika huko? Ni baadhi tu ya thamani ya takataka. Ni inaweza kuwa anwani yoyote kutoka sifuri kwa Bilioni 2 kama una gigs mbili ya RAM, au zero kwa bilioni 4 kama wameweza got gigabytes nne ya RAM. Ni baadhi ya thamani ya takataka, lakini tatizo ni kuwa mfumo wa uendeshaji, ikiwa ni haijatoa wewe kwamba chunk ya kumbukumbu mahsusi kwamba wewe ni kujaribu kwenda, ni kwa ujumla kwenda kusababisha kile tumeona kama segmentation kosa. Hivyo kwa kweli, mmoja wenu ambao wana akihangaika katika matatizo katika masaa ya ofisi au katika matatizo ambayo ni zaidi ujumla na kujaribu kufikiri segmentation kosa, kwamba ujumla maana yake wewe ni kugusa sehemu ya kumbukumbu kwamba unapaswa kuwa. Wewe ni kugusa kumbukumbu kwamba mfumo wa uendeshaji ina si kuruhusiwa wewe kugusa, kama ni na kwenda mbali mno katika safu yako au kuanzia sasa, iwe ni kwa sababu wewe ni kugusa kumbukumbu kwamba tu ni baadhi ya thamani ya takataka. Akifanya hivyo nyota x hapa ni aina ya tabia kisichojulikana. Unapaswa kamwe kufanya hivyo kwa sababu ya tabia mbaya ni, mpango tu kwenda ajali, kwa sababu wewe ni kusema, kwenda anwani hii na wewe huna wazo ambapo anwani hiyo kweli ni. Hivyo mfumo wa uendeshaji ni uwezekano kwenda kwa ajali ya mpango wako kutokana na kwa kweli, hiyo ni kile kilichotokea pale kwa Binky. Hivyo hatimaye, Binky fasta tatizo hili na hili. Hivyo mpango kwamba yenyewe ilikuwa kiujanja. Lakini kama wewe ni aina ya kusonga mbele na kutekeleza mstari huu badala yake, y sawa x tu ina maana chochote anuani ni x, pia kuiweka katika y. Na hivyo pictorially, tumekuwa kuwakilishwa huu kwa mishale miwili kutoka x na y akizungumzia kutoka kwa sehemu moja. Hivyo semantically, x ni sawa kwa sababu y wote wawili wa wale ni hifadhi hiyo mitaani, ergo akionyesha 42, na sasa, unaposema nyota y, kwenda anuani katika y, hii ina kuvutia upande athari. Hivyo anuani katika y ni kitu kimoja kama anwani katika x. Hivyo kama wewe kusema kwenda anwani katika y na mabadiliko ya thamani ya 13, nani mwingine ni walioathirika? X ni, hatua D, hivyo kusema, lazima walioathirika vilevile. Na hakika, jinsi Nick waliochota picha hii katika claymation ilikuwa hasa kwamba. Hata ingawa sisi kufuata pointer y, sisi kuishia katika sehemu moja, na hivyo kama tulikuwa na magazeti nje x au y ya pointee, kisha tunataka kuona thamani ya 13. Sasa, nasema pointee kuwa sambamba na video. Programmers, kwa yangu maarifa, kamwe kweli kusema neno pointee, yaliyo chongoka katika, lakini kwa uthabiti na video, kutambua hiyo ni yote yaliyokuwa maana katika hali hiyo. Hivyo maswali yoyote juu ya claymation au kuyatumia au malloc bado tu? Hakuna? Sawa. Hivyo bila zaidi wasiwasi, hebu tuangalie katika ambapo hii ina kweli zimetumika kwa muda fulani. Hivyo tulikuwa na hii maktaba CS50 kwamba got wote wa kazi hizo. Tumekuwa kutumika GetInt mengi, GetString, pengine GetLongLong mapema katika pset yangu mmoja au hivyo, lakini nini hasa kinachoendelea? Naam, hebu tuangalie kwa haraka chini ya Hood katika mpango huo kuwahamasisha nini sisi kukupa CS50 maktaba, na kwa kweli kama ya wiki iliyopita, sisi kuanza kuchukua wale magurudumu mafunzo mbali. Hivyo hii sasa ni yamepangwa ya postmortem ya kile ina kinachoendelea ndani ya maktaba CS50, hata kama sisi sasa itaanza kusonga mbali na hayo kwa programu nyingi. Hivyo hii ni mpango ujulikanao scanf 0. Ni super mfupi. Ni tu ina mistari haya, lakini utangulizi kazi kuitwa scanf kwamba sisi ni kweli kwenda kuona katika wakati ndani ya maktaba CS50, angalau katika fomu tofauti kidogo. Hivyo mpango huu kwenye mstari 16 anatangaza x kutofautiana. Basi nipe ka nne kwa int. Imekuwa ni kuwaambia user, idadi tafadhali, na kisha hii ni mstari kuvutia kwamba kweli mahusiano pamoja wiki iliyopita na hii. Scanf, na kisha taarifa inachukua string format, kama vile printf, % i maana int, na kisha inachukua pili hoja ambayo inaonekana kidogo funky. Ni ampersand x, na kukumbuka, sisi tu aliona wiki hii mara moja iliyopita. Je ampersand x kuwakilisha? Je ampersand kufanya katika C? Yeah? Watazamaji: pepe ya. DAVID Malan: pepe ya. Hivyo ni kinyume ya nyota operator, ambapo nyota operator anasema, kwenda anwani hii, mwendeshaji ampersand anasema, kufikiri pepe ya kutofautiana hii, na hivyo hii ni muhimu, kwa sababu Madhumuni scanf katika maisha ni kwa Scan mtumiaji pembejeo kutoka keyboard, kutegemea chochote yeye au yeye aina, na kisha kusoma pembejeo kwamba mtumiaji ndani ya kutofautiana, lakini sisi aliona katika wiki mbili zilizopita kuwa kwamba wabadilishane kazi kwamba sisi walijaribu effortlessly kutekeleza mara tu kuvunjwa. Kumbuka kwamba kwa wabadilishane kazi, kama sisi tu alitangaza A na B kama ints, hatukuwa mafanikio wabadilishane vigezo mbili ndani ya kubadilishana tu kama maziwa na OJ, lakini haraka kama wabadilishane akarudi, nini ilikuwa ni matokeo kwa heshima kwa x na y, maadili ya awali? Chochote. Naam. Hakuna kilichotokea wakati huo, kwa sababu swaps mabadiliko tu nakala yake mitaa, ambayo ni kusema, kila wakati huu, wakati wowote tumekuwa wamekuwa kupita katika hoja kwa kazi, tuko tu kupita nakala za hoja hizo. Unaweza kufanya na kwamba chochote unataka na wao, lakini wao wanaenda kuwa hakuna athari juu ya maadili ya awali. Hivyo hii ni tatizo kama wewe wanataka kuwa na kazi kama scanf katika maisha, ambao lengo ni Scan pembejeo mtumiaji kutoka keyboard na kisha kujaza nafasi zilizoachwa wazi, hivyo kwa kusema, yaani, kutoa kutofautiana kama x thamani, kwa sababu kama ningekuwa kupita tu x kwa scanf, kama wewe kufikiria mantiki ya mwisho wiki, scanf unaweza kufanya chochote anataka na nakala ya x, lakini hawakuweza kudumu mabadiliko x isipokuwa sisi kutoa scanf hazina ramani, ili kuzungumza, ambapo x alama doa, ambapo sisi kupita katika anuani ya x ili scanf unaweza kwenda huko na kwa kweli mabadiliko thamani ya x. Na hivyo kweli, kila kwamba mpango huu gani kama mimi kufanya scanf 0, katika chanzo yangu 5m directory, kufanya scanf 0, dot kufyeka scanf, idadi tafadhali 50, shukrani kwa 50. Hivyo si wote kwamba kuvutia, lakini nini kweli yanatokea ni kwamba haraka kama mimi wito scanf hapa hiyo, thamani ya x ni kuwa kudumu iliyopita. Sasa, hii inaonekana nzuri na nzuri, na kwa kweli, Inaonekana kama sisi si kweli haja maktaba CS50 wakati wote tena. Kwa mfano, hebu kukimbia hii kwa mara nyingine tena hapa. Napenda reopen ni kwa ajili ya pili. Hebu jaribu idadi tafadhali na badala ya kusema 50 kama kabla, hebu sema tu hakuna. OK, hiyo ni weird kidogo. SAWA. Na baadhi tu yasiyo na msingi hapa. Hivyo haionekani kushughulikia hali potofu. Kwa hiyo, tunahitaji kuanza ya chini kuongeza baadhi ya makosa ya kuangalia kuhakikisha kwamba mtumiaji ana typed katika idadi halisi kama 50, kwa sababu maneno inaonekana kuandika si wanaona kama tatizo, lakini pengine lazima. Hebu tuangalie hili toleo sasa hiyo ni jaribio yangu reimplement GetString. Kama scanf ina yote haya utendaji kujengwa katika, mbona sisi wamekuwa dabbling na haya magurudumu mafunzo kama GetString? Naam, hapa ni labda yangu mwenyewe rahisi toleo la GetString ambapo wiki iliyopita, mimi ili kuwa alisema, nipe kamba na kuiita buffer. Leo, mimi nina kwenda kuanza tu akisema char nyota, ambayo, kukumbuka, ni tu sawa. Inaonekana scarier lakini ni exact kitu. Basi nipe variable kuitwa buffer hiyo ni kwenda kuhifadhi kamba, kuwaambia kamba user tafadhali, na kisha, kama kabla, hebu jaribu kukopa somo hili scanf % s wakati huu na kisha kupita katika buffer. Sasa, haraka sanity hundi. Kwa nini mimi si kusema ampersand buffer wakati huu? Infer kutoka mfano uliopita. Watazamaji: Char nyota ni pointer. DAVID Malan: Hasa, kwa sababu wakati huu, char nyota ni tayari pointer, mitaani, kwa ufafanuzi wa kwamba nyota kuwa huko. Na kama scanf anatarajia mitaani, yatosha tu kupita katika buffer. Sina haja ya kusema ampersand buffer. Kwa wadadisi, ungeweza kufanya kitu kama hiki. Ingekuwa na maana tofauti. Hii itakuwa kukupa pointer kwa pointer, ambayo ni kweli Jambo halali katika C, lakini kwa sasa, hebu kushika ni rahisi na kuweka hadithi thabiti. Mimi tu kwenda kupita katika buffer na hiyo ni sahihi. Tatizo ingawa ni hii. Hebu kwenda mbele na kukimbia hii Mpango baada ya kuandaa yake. Kufanya scanf 1. Damn hiyo, compiler yangu kuambukizwa makosa yangu. Nipe moja ya pili. Clang. Hebu sema scanf-1.c. SAWA. Kuna sisi kwenda. Naihitaji. CS50 ID ina mbalimbali mipangilio kwamba kulinda wewe dhidi ya mwenyewe. Mimi zinahitajika afya wale na mbio Clang manually wakati huu. Hivyo kamba tafadhali. Mimi nina kwenda mbele na aina katika favorite hujambo dunia yangu. OK, null. Hiyo si kile typed. Hivyo ni dalili ya kitu kuwa kibaya. Hebu kwenda mbele na aina katika kamba kweli kwa muda mrefu. Shukrani kwa batili na sijui kama mimi nina kwenda kuwa na uwezo wa ajali hiyo. Hebu jaribu nakala kidogo kuweka na kuona kama hii husaidia. Tu kuweka mengi ya hii. Ni dhahiri kubwa kamba kuliko kawaida. Hebu tu kweli kuandika. Hakuna Damn it. Amri halikupatikana. Hivyo hiyo ni lisilohusiana. Hii ni kwa sababu mimi pasted baadhi ya wahusika mbaya, lakini hii zinageuka si kwenda kufanya kazi. Hebu jaribu hii kwa mara nyingine tena, kwa sababu ni furaha zaidi kama sisi kweli ajali hiyo. Hebu aina hii na sasa, mimi nina kwenda nakala kamba kweli kwa muda mrefu na sasa hebu angalia kama sisi unaweza ajali jambo hili. Taarifa mimi kuachwa nafasi na mistari mpya na semicolons na wahusika wote funky. Kuingia. Na sasa mtandao ni kuwa tu polepole. Mimi uliofanyika chini amri-V muda mrefu sana, wazi. Damn it! Amri halikupatikana. SAWA. Naam, uhakika ni hata hivyo kufuatia. Kwa hiyo kile ni kweli kwenda tarehe na tamko hili ya char nyota buffer kwenye mstari 16? Kwa hiyo kile ni mimi kupata wakati mimi kutangaza pointer? Wote mimi nina kupata ni thamani wanne Byte aitwaye buffer, lakini nini ndani yake kwa kipindi hiki? Ni baadhi tu ya thamani ya takataka. Kwa sababu wakati wowote kutangaza kutofautiana katika C, ni baadhi tu ya thamani ya takataka, na sisi ni mapya ya safari juu ya ukweli huu. Sasa, wakati mimi kuwaambia scanf, kwenda anwani hii na kuweka chochote mtumiaji aina katika. Kama mtumiaji aina katika hujambo dunia, vizuri, ambapo mimi kuiweka? Buffer ni thamani ya takataka. Hivyo hiyo ni aina ya kama mshale hiyo akizungumzia ambaye anajua wapi. Labda ni akizungumzia hapa hapa katika kumbukumbu yangu. Na hivyo wakati mtumiaji aina katika hujambo dunia, Mpango anajaribu kuweka kamba hujambo dunia backslash 0 katika kwamba chunk ya kumbukumbu. Lakini pamoja na uwezekano mkubwa, lakini wazi si 100% uwezekano, kompyuta ni kwenda basi ajali Mpango kwa sababu hii si kumbukumbu mimi waruhusiwe kugusa. Hivyo katika muda mfupi, mpango huu ni kiujanja kwa hasa sababu hiyo. Mimi kimsingi si kufanya nini? Ni hatua na mimi kuachwa, kama vile sisi liliondolewa kwa mfano kwanza Binky ya? Yeah? Watazamaji: mgao Kumbukumbu? DAVID Malan: mgao Kumbukumbu. Mimi si kweli zilizotengwa kumbukumbu yoyote kwa kamba hiyo. Ili tuweze kurekebisha hii katika michache ya njia. Moja, tunaweza kushika ni rahisi na kwa kweli, sasa uko kwenda kuanza kuona blurring ya mistari kati ya kile safu ni, nini kamba ni, nini a char nyota ni, nini safu ya chars ni. Hapa ni mfano wa pili kuwashirikisha masharti na ilani zote mimi tumefanya kwenye mstari 16 ni, badala ya kusema kwamba buffer ni kwenda kuwa Char nyota, pointer chunk ya kumbukumbu, Mimi nina kwenda proactively sana kutoa mwenyewe buffer kwa 16 wahusika, na kwa kweli, kama wewe ni ukoo na mrefu buffering, pengine kutokana na dunia ya video, ambapo video ni buffering, buffering, buffering. Naam, nini uhusiano hapa? Naam, Ndani ya YouTube na ndani ya wachezaji video ujumla ni safu hiyo ni kubwa kuliko 16. Ni inaweza kuwa safu ya ukubwa moja megabyte, labda megabytes 10, na katika safu kwamba anafanya kisakuzi chako download rundo zima la ka, rundo zima la megabytes ya video, na video mchezaji, YouTube au mtu ni, kuanza kusoma ka kutoka kwamba safu, na wakati wowote unaweza kuona neno buffering, buffering, hiyo ina maana mchezaji ana wamezipata kwa mwisho wa safu. Mtandao ni hivyo polepole kuwa ina si refilled safu na ka zaidi na hivyo uko nje ya bits kuonyesha kwa mtumiaji. Hivyo buffer ni mwalimu mwema mrefu hapa nchini kwamba ni tu safu, chunk ya kumbukumbu. Na hii itakuwa kurekebisha kwa sababu ni zamu nje uweze kutibu arrays kana kwamba wao ni anwani, hata kama buffer ni tu ishara, ni mlolongo wa wahusika, buffer, hiyo ni muhimu kwa ajili yangu, programu, unaweza kupita jina lake kuzunguka kana kwamba ni pointer, kana kwamba walikuwa pepe ya chunk ya kumbukumbu kwa 16 chars. Hivyo hiyo ni kusema, siwezi kupita scanf hasa neno na hivyo kwa sasa, kama mimi kufanya mpango huu, kufanya scanf 2, dot slash scanf 2, na aina katika hujambo dunia, Kuingia, kwamba time-- Hmm, nini kilitokea? Kamba tafadhali. Je, mimi kufanya makosa? Jambo dunia, buffer. Salamu, Dunia. Ah, najua nini ni kufanya. SAWA. Hivyo ni kusoma juu mpaka nafasi ya kwanza. Basi hebu kudanganya kwa muda tu na kusema mimi nilitaka aina ya kitu kweli kwa muda mrefu kama hii ni adhabu kwa muda mrefu hiyo ni moja, mbili, tatu, nne, tano, sita, saba, nane, tisa, 10, 11, 12, 13, 14, 15, 16. SAWA. Kwa hakika ni adhabu kwa muda mrefu. Basi hukumu hii ni muda mrefu zaidi ya 16 wahusika na hivyo wakati mimi hit Enter, nini kitatokea? Naam, katika kesi hii ya hadithi, mimi alikuwa ametangaza buffer kwa kweli kuwa safu na 16 chars tayari kwenda. Hivyo moja, mbili, tatu, nne, tano, sita, saba, nane, tisa, 10, 11, 12, 13, 14, 15, 16. Hivyo herufi 16, na sasa, wakati mimi kusoma katika kitu kama hii ni ndefu adhabu, nini kitatokea ni kwamba mimi nina kwenda kusoma katika hili ni ndefu S-E-N-T-E-N-C-E, hukumu. Hivyo hii ni kwa makusudi Jambo baya ambalo mimi kuweka kuandika zaidi mipaka ya safu yangu, nje ya mipaka ya buffer yangu. Mimi naweza kupata bahati na mpango wataendelea mbio na huduma, lakini kwa ujumla kuzungumza, hii hakika ajali mpango wangu, na ni mdudu katika wangu kanuni wakati mimi hatua nje ya mipaka ya kwamba safu, kwa sababu mimi sijui kama ni lazima kwenda kwa ajali au kama mimi nina kwenda tu kupata bahati. Hivyo hii ni tatizo kwa sababu katika kesi hiyo, haina wanaonekana kazi na hebu kumjaribu hatma hapa, ingawa IDE inaonekana kuvumilia kidogo kabisa of-- Kuna sisi kwenda. Hatimaye. Kwa hiyo mimi nina moja tu kwamba unaweza kuona hili. Hivyo mimi tu alikuwa na mengi ya furaha kuandika nje halisi kweli kwa muda mrefu maneno kwamba ni hakika ilizidi 16 ka, kwa sababu mimi typed katika hii mambo ya muda mrefu mbalimbali line maneno, na kisha taarifa ya kile kilichotokea. Mpango walijaribu uchapishaji ni na kisha got segmentation kosa na segmentation makosa ni wakati kitu kama hii kinatokea na mfumo wa uendeshaji anasema hapana, hawezi kugusa kwamba kumbukumbu. Tunakwenda kuua Mpango kabisa. Hivyo hii inaonekana tatizo. Nimekuwa kuboresha mpango ambapo angalau kuwa baadhi ya kumbukumbu, lakini hii inaweza kuonekana kuunda kazi GetString na kupata masharti ya baadhi ya urefu mahususi 16. Hivyo kama unataka kusaidia tena hukumu ya 16 wahusika, unafanya nini? Naam, unaweza kuongeza ukubwa wa buffer huu kwa 32 au kwamba inaonekana aina ya muda mfupi. Mbona sisi tu kufanya ni 1,000 lakini kushinikiza nyuma. Nini majibu shirikishi wa tu kuepuka tatizo hili kwa kufanya buffer yangu kubwa, kama chars 1000? Kwa kutekeleza GetString kwa njia hii. Nini kizuri au kibaya hapa? Yeah? Watazamaji: Kama wewe kufunga zile kura ya nafasi na huna matumizi yake, basi huwezi reallocate nafasi hiyo. DAVID Malan: Kabisa. Ni fujo kadiri kama huna kweli haja ya ka wale 900 na bado wewe ni kuuliza kwa 1,000 katika jumla anyway, wewe ni kuteketeza kumbukumbu zaidi juu tu kompyuta ya mtumiaji kuliko unahitaji, na baada ya yote, baadhi ya umefanya tayari yaliyojitokeza katika maisha kwamba wakati uko mbio kura ya mipango na wao ni kula up kura ya kumbukumbu, huu unaweza kweli kuathiri utendaji na mtumiaji uzoefu kwenye kompyuta. Hivyo hiyo ni aina ya ufumbuzi wavivu, kwa hakika, na kinyume chake, ni fujo tu, tatizo ni nini bado, hata kama mimi kufanya buffer yangu 1,000? Yeah? Watazamaji: kamba ni urefu 1,001. DAVID Malan: Hasa. Kama kamba yako ni urefu 1,001, una halisi tatizo moja, na kwa hoja yangu, napenda tu kisha kufanya hivyo mwaka 2000, lakini nyinyi hamjui katika kuendeleza jinsi kubwa ni lazima, na bado, sijui na kukusanya mpango wangu kabla ya kuruhusu watu kutumia na download yake. Hivyo hii ni hasa aina ya mambo ambayo CS50 maktaba inajaribu kutusaidia kwa na tutaweza mtazamo tu katika baadhi ya utekelezaji ya msingi hapa, lakini hii ni CS50 nukta C. Hii ni faili kwamba imekuwa juu ya CS50 IDE wiki hizi zote kwamba tumekuwa kutumia. Ni kabla ya ulioandaliwa na wameweza wamekuwa wakitumia ni moja kwa moja kwa asili ya kuwa na dash L CS50 bendera na Clang, lakini kama mimi kitabu chini kwa njia zote za kazi hizi, hapa ni GetString, na tu kukupa ladha ya nini kinaendelea, hebu tuangalie kwa haraka katika utata jamaa. Siyo super muda mrefu kazi, lakini hatukuwa Una kufikiri zote kwa bidii juu jinsi ya kwenda juu ya kupata masharti. Hivyo hapa ni buffer wangu na mimi inaonekana initialize kwa null. Hii, bila shaka, ni kitu kimoja kama Char nyota, lakini niliamua katika utekelezaji wa maktaba CS50 kwamba kama tunakwenda kuwa nguvu kabisa, Sijui mapema jinsi kubwa ya watumiaji kamba wanaenda wanataka kupata. Hivyo nina kwenda kuanza na kamba tu tupu na mimi nina kwenda kujenga kama kiasi kumbukumbu kama nahitaji walionao kamba user na kama sina kutosha, mimi nina kwenda kuuliza mfumo wa uendeshaji kwa ajili ya kumbukumbu zaidi. Mimi nina kwenda kutoa hoja zao kamba ndani ya chunk kubwa ya kumbukumbu na mimi nina kwenda kutolewa au bure chunk isiyotosheleza kikubwa cha kumbukumbu na tunakwenda tu kufanya hivyo iteratively. Hivyo mtazamo wa haraka, hapa tu kutofautiana na ambayo mimi nina kwenda kuweka wimbo uwezo wa buffer yangu. Jinsi wengi ka naweza fit? Hapa ni kutofautiana n na ambayo mimi nina kwenda kuweka wimbo wa jinsi wengi ka ni kweli katika buffer au kwamba mtumiaji typed. Kama wameweza si hii kuona mbele, wewe Unaweza kutaja kwamba kutofautiana kama int ni unsigned, ambayo kama jina la kupendekeza, ina maana ni yasiyo ya hasi, na kwa nini Mimi milele wanataka kujisumbua inayobainisha kuwa int sio tu int, lakini ni unsigned int? Ni int mashirika yasiyo ya hasi. Je [inaudible] ina maana gani? Watazamaji: Ni kuelezea kiasi ya kumbukumbu ambayo inaweza kuwa [inaudible]. DAVID Malan: Yeah. Hivyo kama mimi kusema unsigned, hii ni kweli kutoa hata kidogo ya kumbukumbu ya ziada na inaonekana aina ya silly, lakini kama wewe kuwa moja kidogo ya kumbukumbu za ziada, kwamba ina maana kuwa mara mbili kama wengi maadili unaweza kuwakilisha, sababu inaweza kuwa 0 au 1. Hivyo kwa default, int inaweza kuwa takribani hasi bilioni 2 njia yote hadi chanya bilioni 2. Hayo ni kati kubwa, lakini ni bado aina ya fujo kama wewe tu huduma ya juu ukubwa, ambayo tu intuitively lazima zisizo hasi au chanya au 0, vizuri basi, mbona kupoteza bilioni 2 maadili inawezekana kwa idadi hasi kama wewe ni kamwe kwenda kutumia yao? Hivyo kwa kusema unsigned, sasa int wangu anaweza kuwa kati ya 0 na takribani bilioni 4. Hivyo hapa ni tu int C kwa sababu za sisi si kupata katika tu sasa kama kwa nini ni int badala ya Char, lakini hapa ni kiini cha nini kinaendelea juu, na baadhi yenu yapate kutumia, kwa mfano, kazi fgetc hata katika pset nne au baada ya hapo, tutaweza kuona ni tena katika tatizo kuweka tano, fgetc ni nzuri kwa sababu kama jina aina ya, aina ya arcanely unaonyesha, ni kazi ambayo anapata tabia na hivyo, nini tofauti kimsingi kuhusu nini sisi ni kufanya katika GetString ni sisi siyo kutumia scanf kwa njia sawa. Sisi ni mnyama tu pamoja hatua kwa hatua zaidi ya chochote mtumiaji typed katika, kwa sababu tunaweza daima kutenga moja Char, na hivyo tunaweza daima salama kuangalia char moja kwa wakati mmoja, na uchawi kuanza kutokea hapa. Mimi nina kwenda kitabu chini ya katikati ya kazi hii tu kuanzisha ufupi kazi hii. Kiasi kama kuna malloc kazi, kuna realloc kazi ambapo realloc inakuwezesha reallocate chunk ya kumbukumbu na kufanya hivyo kubwa au ndogo. Hadithi hiyo kwa muda mrefu fupi na kwa wimbi la mkono wangu kwa leo, tunajua kwamba kile GetString anafanya ni ni aina ya magically kuongezeka au kushuka buffer kama mtumiaji aina katika kamba yake. Hivyo kama mtumiaji aina kamba fupi, kanuni huu tu kutenga kutosha kumbukumbu na kifafa kamba. Kama mtumiaji anaendelea kuandika kama mimi alifanya hivyo tena na tena na tena, vizuri, kama buffer ya awali hii kubwa na mpango anatambua, kwa kusubiri dakika, mimi nina nje ya nafasi, itakuja mara mbili ukubwa wa buffer na kisha mara mbili ya ukubwa wa buffer na kificho kwamba anafanya mara dufu, kama sisi kuangalia ni hapa, ni tu hii wajanja mmoja mjengo. Unaweza kuwa na kuonekana syntax hii kabla, lakini kama wewe kusema nyota ni sawa na, hii ni kitu kimoja kama akisema uwezo mara 2. Hivyo ni kuvaa tu mara dufu uwezo wa buffer na kisha kuwaambia realloc kutoa yenyewe kwamba kumbukumbu mengi zaidi. Sasa, kama kando, kuna ni kazi nyingine katika hapa kwamba sisi si kuangalia ndani ya maelezo yoyote zaidi ya kuonyesha katika GetInt, sisi kutumia GetString katika GetInt. Sisi kuangalia kwamba siyo null, ambayo, kukumbuka, ni thamani maalum kwamba ina maana kitu potoka. Tuko nje ya kumbukumbu. Bora kuangalia kwa ajili hiyo. Na sisi kurudi thamani mwangalizi. Lakini mimi itabidi kuahirisha kwa maoni kama kwa kwa nini na kisha sisi kutumia binamu hii ya scanf aitwaye sscanf na ni zamu nje kwamba sscanf, au kamba scanf, inakuwezesha tuangalie mstari kwamba mtumiaji typed katika na basi wewe kuchambua kimsingi na kile mimi nina kufanya hapa ni mimi nina kuwaambia sscanf, kuchambua chochote mtumiaji ana typed katika na kuhakikisha% i, kuna integer ndani yake, na sisi si kupata katika leo kwa nini hasa pale pia % c hapa, lakini hiyo kwa kifupi inaruhusu sisi kuchunguza kama mtumiaji typed katika kitu bogus baada idadi. Hivyo sababu hiyo GetInt na GetString kukuambia kujaribu tena, jaribu tena, jaribu tena Ni kwa sababu ya yote ya kwamba kanuni tumekuwa imeandikwa, ni aina ya kuangalia pembejeo mtumiaji katika kuhakikisha ni kabisa numeric au ni floating halisi hatua thamani au kama, kulingana na thamani gani kazi unatumia. Whew. SAWA. Hiyo ilikuwa ni Mouthful lakini uhakika hapa ni kwamba sababu tulikuwa na wale magurudumu mafunzo juu ya ni kwa sababu katika ngazi ya chini, kuna tu mambo mengi ambayo yanaweza kwenda vibaya kwamba tulitaka kwa preemptively kushughulikia mambo hayo kwa hakika katika wiki ya kwanza ya darasa, lakini sasa kwa pset nne na pset tano na zaidi ya wewe kuona kwamba ni zaidi hata wewe lakini pia wewe uwezo zaidi ya kutatua hayo aina ya matatizo wewe mwenyewe. Maswali yoyote juu ya GetString au GetInt? Yeah? Watazamaji: Kwa nini wewe mara mbili uwezo wa buffer badala ya kuongeza tu hivyo kwa kiasi halisi? DAVID Malan: swali nzuri. Kwa nini sisi mara mbili ya uwezo ya buffer kinyume tu kuongeza kuwa na baadhi ya thamani ya mara kwa mara? Ilikuwa ni uamuzi wa kubuni. Sisi tu aliamua kwamba kwa sababu inaelekea kuwa ni kidogo ghali wakati-busara kuuliza mfumo wa uendeshaji kwa kumbukumbu, hatukuwa wanataka kuishia kupata katika Hali kwa masharti kubwa kuwa tulikuwa kuuliza OS tena na tena na tena na tena katika mfululizo wa haraka kwa ajili ya kumbukumbu. Hivyo sisi tu aliamua, kwa kiasi fulani kiholela lakini tunatarajia sababu, kwamba, unajua nini, hebu kujaribu kupata mbele ya sisi wenyewe na kuweka tu mara dufu hivyo ili sisi kupunguza kiasi cha mara tuna kuwaita malloc au realloc, lakini hukumu jumla piga kutokana na kukosekana kwa kujua nini watumiaji kutaka aina katika. Njia zote mbili inaweza kuwa arguable. Arguably nzuri. Basi hebu tuangalie michache ya madhara mengine ya kumbukumbu, mambo ambayo yanaweza kwenda vibaya na zana kwamba unaweza kutumia kukamata aina hii ya makosa. Ni zinageuka nyote, hata kama check50 hana niliwaambia kama kiasi, wamekuwa kuandika buggy kificho tangu wiki moja, hata kama vipimo wote check50 ni kupita, na hata kama wewe na TF yako ni super na imani kwamba kanuni yako anafanya kazi kama ilivyokusudiwa. Kanuni yako imekuwa buggy au kiujanja kwa kuwa nyote, katika kutumia maktaba CS50, wamekuwa kuvuja kumbukumbu. Tumekuwa kuuliza mfumo wa uendeshaji kwa kumbukumbu katika zaidi ya mipango umefanya imeandikwa, lakini wameweza kamwe kweli kutokana na nyuma. Umetumia GetString na GetInt na GetFloat, lakini kwa GetString, wameweza kamwe kuitwa unGetString au Kutoa Kamba Nyuma au kama, lakini tumeona kwamba GetString gani kutenga kumbukumbu kwa njia ya malloc au hii kazi realloc, ambayo ni tu sawa sana katika ulimwengu wa kiroho, na bado, tumekuwa kuuliza mfumo wa uendeshaji kwa kumbukumbu na kumbukumbu tena na tena lakini kamwe kutoa ni nyuma. Sasa, kama kando, zinageuka kuwa wakati mpango quits, wote wa kumbukumbu ni moja kwa moja huru. Hivyo si kuwa mpango kubwa. Ni si kwenda kuvunja IDE au polepole mambo ya chini, lakini wakati mipango kufanya ujumla kuvuja kumbukumbu na wao ni mbio kwa muda mrefu. Kama wameweza milele kuonekana kijinga kidogo beach mpira katika Mac OS au hourglass juu ya Windows ambapo ni aina ya kupunguza chini au kufikiri au mawazo au tu kwa kweli kuanza kupunguza kwa kutambaa, ni uwezekano sana inaweza kuwa Kutokana na kumbukumbu kuvuja. Programmers aliyeandika programu unatumia kuuliza mfumo wa uendeshaji kwa ajili ya kumbukumbu kila baada ya dakika chache, kila saa. Lakini kama wewe ni mbio programu, hata kama ni kupunguzwa katika kompyuta yako kwa masaa au siku ya mwisho, unaweza kuwa kuomba zaidi na zaidi kumbukumbu na kamwe kweli kutumia na hivyo kanuni yako inaweza kuwa, au mipango inaweza kuwa kuvuja kumbukumbu, na kama kuanza kuvuja kumbukumbu, kuna chini ya kumbukumbu kwa programu nyingine, na athari ni kwa kupunguza kila kitu chini. Sasa, hii ni kwa mbali moja ya programu nyingi za mauaji utakuwa na fursa kuendesha katika CS50 kadiri kama matokeo yake ni hata zaidi kuliko ya wachache Clang au kufanya au yoyote ya amri mipango mstari tumekuwa kukimbia kabla lakini nashiriki, iliyoingia katika pato lake ni baadhi ya vidokezo super kusaidia kwamba itakuwa muhimu ama kwa pset nne au kwa hakika pset tano. Hivyo Valgrind ni chombo ambazo zinaweza kutumika kwa kuangalia kwa uvujaji kumbukumbu katika mpango wako. Ni rahisi kuendesha. Kukimbia Valgrind na kisha, hata ingawa ni verbose kidogo, dash dash kuvuja kuangalia sawa kamili, na kisha dot kufyeka na jina la mpango wako. Hivyo Valgrind mapenzi kisha kukimbia mpango wako na mwishoni sana ya mpango wako mbio kabla quits na anatoa mwingine haraka, itakuja kuchambua yako Mpango wakati imekuwa ni mbio na kukuambia gani kuvuja kumbukumbu yoyote na bado bora, je kugusa kumbukumbu kwamba hawakuwa wa wewe? Haiwezi kukamata kila kitu, lakini ni nzuri katika kuambukizwa mambo mengi. Hivyo hapa ni mfano wa kuwa na kukimbia yangu mpango huu, baada ya kukimbia Valgrind, juu ya mpango ujulikanao kumbukumbu, na mimi nina kwenda kuonyesha mistari kwamba ni hatimaye ya riba na sisi. Hivyo kuna usumbufu hata zaidi kwamba nimepata kufutwa kutoka slide. Lakini hebu tu kuona nini hii mpango ni uwezo wa kutuambia. Ni uwezo wa kutuambia mambo kama batili kuandika ya ukubwa 4. Kwa maneno mengine, kama wewe kugusa kumbukumbu, hasa ka 4 ya kumbukumbu kwamba unapaswa kuwa, Valgrind anaweza kukuambia kwamba. Kuandika batili ya ukubwa 4. Wewe kuguswa ka nne kwamba unapaswa kuwa. Wapi unaweza kufanya hivyo? Hii ni uzuri. Kumbukumbu nukta c mstari 21 ni wapi Star up na hii ndiyo sababu ni manufaa. Kiasi kama GDB, inaweza kusaidia uhakika wewe katika kosa halisi. Sasa, hii moja zaidi kidogo verbose, kama si utata. Ka 40 katika 1 vitalu ni dhahiri waliopotea katika hasara rekodi ya 1 ya 1. Hiyo ina maana gani? Naam, ni njia tu wewe aliuliza kwa Ka 40 na kamwe akampa. Wewe kuitwa malloc au wewe kuitwa GetString na mfumo wa uendeshaji aliwapa 40 ka, lakini kamwe huru au iliyotolewa kwamba kumbukumbu, na kuwa wa haki, tumekuwa kamwe kuonyesha jinsi ya kutoa nyuma kumbukumbu. Zinageuka kuna super kazi rahisi kuitwa bure. Inachukua moja hoja, jambo unataka bure au kutoa nyuma, lakini 40 ka, inaonekana, katika mpango huu zimepotea katika mstari 20 ya kumbukumbu dot c. Basi hebu angalia mpango huu. Ni super maana. Ni tu inaonyesha makosa fulani. Hivyo hebu tuangalie. Hapa ni kuu na kuu, ilani, wito kazi kuitwa f na kisha anarudi. Hivyo si yote ya kuvutia. Je f nini? Taarifa Sikutaka kwa mfano. Nilitaka kuendelea kificho kama ndogo kama iwezekanavyo. Hivyo mimi kuweka f juu kuu na hiyo ni nzuri, hakika, kwa mipango ya muda kama hii. Hivyo f haina kurudi chochote na anafanya kuchukua kitu chochote, lakini haina kufanya hivyo. Inatangaza, kiasi kama katika mfano Binky, pointer kuitwa x ambayo inaenda kuhifadhi pepe ya int. Hivyo hiyo ni upande wa mkono wa kushoto. Katika lugha ya Kiingereza, ni nini mkono wa kulia upande kufanya? Mtu yeyote? Ni nini hii kufanya kwa ajili yetu? Yeah? Watazamaji: [inaudible] Mara ukubwa wa int ambayo ni mara 10 kwamba [inaudible] DAVID Malan: nzuri na napenda kujumlisha. Hivyo kutenga nafasi ya kutosha kwa ajili ya 10 integers au 10, nini ukubwa wa int, ni ka nne, hivyo mara 10 4 ni 40, ili upande wa kulia kwamba nimekuwa yalionyesha ni nipe 40 ka na kuhifadhi anuani ya Byte kwanza ndani ya x. Na sasa mwisho, na hapa ndipo mpango huu ni Buggy, nini kibaya na mstari 21 kulingana na mantiki hiyo? Nini mbaya na mstari 21? Yeah? Watazamaji: Unaweza si ripoti katika x [inaudible]. DAVID Malan: Yeah. Mimi hawapaswi ripoti katika x kama hicho. Hivyo syntactically, hiyo ni sawa. Nini ni nzuri ni, kiasi kama wewe unaweza kutibu jina la safu kana kwamba ni pointer, vile vile Unaweza kutibu pointer kana kwamba ni safu, na hivyo naweza syntactically kusema x mabano kitu, x mabano i, lakini 10 ni tatizo. Kwa nini? Watazamaji: Kwa sababu si ndani. DAVID Malan: Siyo ndani ya kwamba chunk ya kumbukumbu. Nini thamani kubwa ni lazima kuwa na kuweka katika mabano mraba wale? 9, 0 kupitia 9. Kwa sababu ya sifuri Indexing. Hivyo 0 kupitia 9 itakuwa nzuri. Mabano 10 si nzuri na lakini, kukumbuka ingawa, kila wakati Mimi kuonekana kujaribu kufanya CS50 IDE ajali na kuandika katika maadili bogus, haina daima kushirikiana, na kwa hakika, wewe mara nyingi kupata bahati kwa sababu tu mfumo wa uendeshaji haina taarifa kwamba wewe milele hivyo kidogo kupita baadhi chunk ya kumbukumbu, kwa sababu wewe walikaa ndani ya kitaalam sehemu yako, lakini zaidi juu ya kwamba darasani mifumo ya uendeshaji, na hivyo kitu kama hii inaweza kwa urahisi sana kwenda bila kutambulika. Mpango wako kamwe kwenda ajali mara kwa mara lakini labda mara moja katika muda. Na hivyo hebu jaribu Valgrind juu ya hili, na hapa ni ambapo tutaweza kupata kuzidiwa na pato kwa muda. Hivyo kufanya kumbukumbu Valgrind kuvuja kuangalia sawa full dot slash kumbukumbu. Na hapa ni kwa nini mimi ahadi uandikishaji huu utazidi. Hapa ni nini Valgrind, hapa ni nini programu, baadhi ya miaka iliyopita- aliamua itakuwa ni wazo nzuri kwa pato kuangalia kama. Basi hebu kufanya maana ya hii. Hivyo njia zote juu ya mkono wa kushoto upande kwa sababu hakuna nzuri Ni utaratibu ID kwa mpango sisi kukimbia tu, kitambulisho kipekee kwa ajili ya mpango sisi tu mbio. Sisi kufutwa kwamba kuanzia slide, lakini kuna ni baadhi ya taarifa muhimu katika hapa. Hebu kitabu hadi juu sana. Hapa ni wapi sisi kuanza. Hivyo si yote pato kiasi hicho. Hapa ni kwamba kuandika batili ukubwa 4 kwenye mstari 21. Naam, alikuwa mstari 21 nini? Mstari 21 ilikuwa hasa hii na inafanya hisia kwamba mimi niko katika kihalali kuandika ka 4 kwa sababu mimi nina kujaribu kuweka integer hii, ambayo inaweza kuwa kitu chochote, tu hutokea kwa kuwa sifuri, lakini nina kujaribu kuiweka katika eneo hiyo haina mali yangu. Aidha, chini hapa, 40 ka katika moja vitalu ni dhahiri waliopotea katika rekodi 1. Hii ni kwa sababu wakati mimi wito malloc hapa, mimi kamwe kweli huru kumbukumbu. Hivyo ni jinsi gani tunaweza kurekebisha hili? Hebu kwenda mbele na kuwa salama kidogo na kufanya 9 huko na napenda hapa bure x. Hii ni kazi mpya kwa leo. Kama mimi sasa rerun kufanya kumbukumbu dot slash, hebu kukimbia Valgrind juu yake tena, kuongeza dirisha yangu na kugonga kuingia. Sasa, ni nzuri. Wao kuzika habari njema katika yote ya pato hili. Vitalu wote lundo walikuwa huru. Tutaweza kurudi kwa kile chungu ni, lakini hakuna uvujaji yanawezekana. Hivyo hii ni tu mwingine chombo kwa ajili ya chombo kit yako na ambayo unaweza kuanza kupata sasa makosa kama hayo. Lakini hebu angalia nini zaidi yanaweza kwenda vibaya hapa. Hebu mpito sasa kwa kweli kutatua tatizo. Kama kando, kama hii itakuwa kupunguza kidogo ya kuchanganyikiwa au mvutano, hii sasa ni funny. Naam. Hiyo ni nzuri sana. Kwa sababu kuyatumia ni anwani na anwani kwa ujumla kwa mkataba imeandikwa na hexadesimoli. Ha, ha, hii ni funny sasa. Hata hivyo, hivyo hebu sasa kweli kutatua tatizo. Hii imekuwa super, super ngazi ya chini hivi sasa, na tunaweza kweli kufanya muhimu mambo kwa maelezo haya ngazi ya chini. Hivyo sisi ilianzisha wiki chache iliyopita dhana ya safu. Safu ilikuwa nzuri kwa sababu ni vigumu kusafisha kificho wetu kwa sababu kama sisi alitaka kuandika mpango na wanafunzi mbalimbali au majina mbalimbali na nyumba na dorms na vyuo na yote hayo, tunaweza kuhifadhi kila kitu zaidi cleanly ndani ya safu. Lakini kupendekeza upande wa chini moja wa safu hivi sasa. Hata kama umefanya si mateso mwenyewe katika mpango, tu instinctively, kile ni kitu mbaya kuhusu safu, labda? Nasikia baadhi murmurs. Watazamaji: Ni vigumu na mabadiliko ya kawaida. DAVID Malan: Ni vigumu na mabadiliko ya kawaida. Huwezi kubadili ukubwa wa safu, kwa kweli, per se katika C. Unaweza kutenga safu mwingine, hoja ya kila kitu kutoka moja ya zamani ndani ya mwezi, na sasa kuwa na baadhi ya nafasi ya ziada, lakini si kama lugha kama Java au chatu au idadi yoyote ya wengine Lugha ambazo baadhi yenu inaweza kuwa na mazoea ambapo unaweza tu kuendelea kuongeza vitu ad nauseam hadi mwisho wa safu. Wakati una safu ya ukubwa 6, kwamba ni kawaida yake, na hivyo kama wazo mapema kuwa buffer ya ukubwa fulani, una nadhani nje ya lango kile kawaida unataka kuwa ni? Kama wewe nadhani kubwa mno, wewe ni kupoteza nafasi. Kama wewe nadhani ndogo mno, wewe hawezi kuhifadhi data kwamba, angalau bila mengi zaidi kazi. Hivyo leo, shukrani kwa kuyatumia, tunaweza kuanza wakitengeneza pamoja desturi yetu wenyewe miundo data, na katika kweli, hapa ni kitu kwamba inaonekana zaidi kidogo cryptic katika mtazamo wa kwanza, lakini hii ni nini Tutamwita wanaohusishwa orodha, na jina lake aina ya muhtasari yake. Ni orodha ya namba, au katika kesi hiyo, orodha ya namba, lakini inaweza kuwa orodha ya kitu chochote, lakini ni wanaohusishwa pamoja na njia ya mishale, na tu kuchukua nadhani na kile mbinu sisi ni kwenda kuwa na uwezo kushona pamoja, aina ya kama popcorn na thread, wanaohusishwa orodha mistatili hapa? Idadi yake? Nini lugha ya msingi kipengele? Watazamaji: pointer. DAVID Malan: pointer. Hivyo kila mmoja mishale hizi hapa inawakilisha pointer au tu mahali. Hivyo kwa maneno mengine, kama nataka kuhifadhi orodha ya namba, Siwezi tu kuhifadhi kama nataka uwezo wa kukua na kuogopa muundo wa data zangu katika safu. Hivyo mimi haja ya kuwa na kidogo sophistication zaidi, lakini taarifa kwamba hii picha aina ya unaonyesha kwamba kama wameweza tu got nyuzi kidogo kuunganisha kila kitu pamoja, pengine ni kwamba ngumu ya kutengeneza nafasi katika kati ya mbili ya mistatili wale au mbili ya nodes hizo, kama tutaweza kuanza kuwaita, kuweka katika nodi mpya, na kisha kwa baadhi uzi mpya, tu shimoni nodes tatu kwa pamoja, moja ya kwanza, moja ya mwisho, na moja kwamba wewe tu kuingizwa katika katikati. Na hakika orodha wanaohusishwa, tofauti na safu, ni nguvu. Inaweza kukua na inaweza kuogopa na huna una kujua au huduma mapema jinsi data kiasi gani ni kwenda kuwa hifadhi, lakini zinageuka tuna kuwa kidogo makini kuhusu jinsi ya kutekeleza hili. Hivyo kwanza hebu fikiria jinsi sisi kutekeleza mmoja wa haya mistatili kidogo. Ni rahisi kutekeleza int. Wewe tu kusema int n na kisha kupata ka 4 kwa int, lakini jinsi gani mimi kupata int, simu yake n, na kisha pointer, hebu simu yake ijayo. Tunaweza kuwaita hawa mambo chochote tunataka lakini nahitaji muundo data desturi. Yeah? Watazamaji: Ampersand [inaudible]. DAVID Malan: Hivyo ampersand tutatumia kupata pepe ya nodi uwezekano. Lakini tunahitaji mwingine hulka ya C ili kunipa uwezo wa kujenga hii Mstatili desturi, desturi hii kutofautiana kama wewe, katika kumbukumbu. Watazamaji: struct. DAVID Malan: struct. Kumbuka kutoka wiki iliyopita, sisi ilianzisha struct, hii keyword rahisi kwamba unatuwezesha kufanya mambo kama hayo. C hakuwa na kuja na data muundo inayoitwa mwanafunzi. Ni huja na int na kuelea na char na vile, lakini haina kuja na mwanafunzi, lakini tunaweza kujenga aina mwanafunzi data, mwanafunzi muundo, na syntax hii hapa. Na utaona hii tena na tena. Hivyo msiwe na wasiwasi juu kukariri maneno, lakini keyword hiyo ni muhimu ni tu ukweli kwamba sisi alisema struct na kisha sisi kuitwa ni mwanafunzi na ndani ya ya mwanafunzi alikuwa na jina na nyumba au Dorm au kama. Na hivyo sasa leo, hebu kupendekeza hii. Nimekuwa aliongeza maneno machache, lakini kama nataka kutekeleza hili Mstatili hiyo ni got wote int na pointer, unajua nini, mimi nina kwenda kutangaza struct nodi aitwaye. Mimi pia, ndani yake, kwenda kusema kwamba nodi, mstatili hii, ina int na tutaweza simu yake n na ina pointer ijayo. Na hii ni kidogo verbose, lakini kama wewe kufikiri juu yake, mishale waliokuwa katika picha wakati iliyopita ni wa nini data aina? Ambapo kila mmoja wa wale mishale ni akizungumzia kwa aina gani ya muundo wa data? Siyo akizungumzia tu int per se. Ni akizungumzia zima mstatili kitu na kwamba jambo mstatili, tulivyosema, inaitwa nodi. Na hivyo sisi aina ya kuwa na recursively kufafanua hii kama kwamba nodi, tukisema, vyenye int kuitwa n na pointer iitwayo ijayo na aina ya muundo data ambayo kwamba pointi pointer ni inaonekana kwenda kuwa nodi struct. Hivyo hii ni annoyingly verbose na tu kuwa pedantic, sababu ni kwa nini hatuwezi tu kusema hii, ambayo kusema ukweli inaonekana mengi zaidi someka, ni kwa sababu wanakumbuka kwamba C kusoma mambo juu hadi chini, kushoto na kulia. Siyo mpaka sisi kupata semicolon kwamba nodi keyword kweli lipo. Hivyo kama tunataka kuwa na aina hii ya kumbukumbu mzunguko ndani ya takwimu muundo, tuna kufanya hivyo, ambapo tunasema struct nodi juu, ambayo inatupa njia tena ya kuelezea hii Jambo, basi ndani ya tunasema struct nodi, na kisha katika mstari wa mwisho sana tunasema, sawa, C, kwa njia, wito tu damn hili lote Jambo nodi na kuacha kutumia keyword struct kabisa. Hivyo hii ni tu aina ya kisintaksia hila kwamba hatimaye unatuwezesha kujenga kitu ambacho inaonekana hasa kama hii. Hivyo kama sisi kudhani sasa tunaweza kutekeleza jambo hili katika C, jinsi gani sisi kweli kuanza apitaye hii? Naam, kwa kweli, wote sisi kufanya ni iterate kutoka kushoto kwenda kulia na tu aina ya kuingiza nodes nodes au kufuta au kutafuta mambo popote tunataka, lakini kwa kufanya hivyo, hebu kwenda mbele na kufanya mambo madogo zaidi halisi kwa sababu hii imekuwa super ngazi ya chini hivi sasa. Je, mtu yeyote literally kama kuwa ya kwanza? SAWA. Kuja juu juu. Jina lako ni nini? DAVID: David. DAVID Malan: Daudi. Vyema kukutana na wewe. Mimi pia. Sawa. Na tunahitaji namba 9. Siyo mazuri kama ya kwanza, labda. Sawa, namba 9. Namba 17, tafadhali. Hebu nirejee nyuma kidogo. Idadi 22, tafadhali, na vipi kuhusu mbali nyuma kama ninaweza kuona mikono yoyote pamoja na yote mwanga au hapana. Mtu ni kuwa alijitolea pale pale. Je, unataka kuja? Forearm yako ni nguvu ya kwenda juu. OK, 17. 22. 26 ni kuja chini. Je, mtu mwingine kama forcefully-- Haya up. Kujitolea halisi. Kwa hiyo kwa haraka sana, kama nyie wanaweza kupanga wenyewe tu kama nodes kwenye screen. Asante. Na wewe utakuwa na 26. Haki na ya haraka zote utambulisho. Kwa hiyo mimi nina David na wewe ni pia? DAVID: David. DAVID Malan: Na wewe ni? JAKE: Jake. SUE: Sue. ALEX: Alex. RAPHAEL: Raphael. TAYLOR: Taylor. DAVID Malan: Taylor. Bora. Basi hizi ni kujitolea yetu kwa leo na kwenda mbele na kuhama kidogo kwa njia hiyo, na tu kwenda mbele na kuweka kufanya idadi yako kama wewe ni au yako ishara ya kwanza na kutumia mkono wako wa kushoto, kwenda mbele na kutekeleza tu mishale hizi, tu ili mkono wako wa kushoto ni halisi akionyesha chochote unapaswa uhakika katika, na kutoa mwenyewe baadhi chumba ili tunaweza kuibua kuona mikono yako kweli akizungumzia, na unaweza kumweka tu aina ya katika ardhi ni nzuri. Hivyo hapa tuna orodha wanaohusishwa ya moja, mbili, tatu, nne, tano nodes awali, na taarifa tuna hii maalum pointer mwanzoni ambaye ni ufunguo kwa sababu tuna kuweka wimbo ya zima urefu orodha namna fulani. Haya guys, ingawa wao ni wa kushoto na haki, nyuma kwa nyuma katika kumbukumbu, kwa kweli wanaweza kuwa mahali popote katika kumbukumbu ya kompyuta. Hivyo guys haya inaweza kuwa amesimama mahali popote juu ya hatua na hiyo ni nzuri, hivyo muda mrefu kama wao ni kweli akionyesha mtu mwingine, lakini kuweka mambo safi na rahisi, tutaweza tu kuteka yao kwa haki kama kushoto hii, lakini kuna inaweza kuwa mapengo mkubwa katika kati ya nodes hizo. Sasa, kama nataka kwa kweli kuingiza baadhi thamani mpya, hebu kwenda mbele na kufanya hili. Tuna fursa sasa kuchagua nodi mwingine. Kusema hebu kuanza mbali na mallocing 55. Je, mtu akili kuwa malloc? OK, kuja juu juu. Jina lako ni nini? RAINBOW: Rainbow. DAVID Malan: Rainbow? Sawa. Malloc Rainbow. Kuja juu juu. Hivyo basi, tuna kujiuliza algorithmically ambapo tunaweza kuweka 55. Hivyo sote tunajua, ni wazi, ambapo yeye pengine ni mali ikiwa sisi ni kujaribu kuweka hii yamepangwa na kama wewe guys inaweza kuchukua moja kurudi nyuma hivyo hatuna kuanguka mbali hatua, kwamba itakuwa kubwa. Hivyo kweli, Rainbow, kuanza juu hapa na mimi, kwa sababu sisi kama kompyuta sasa unaweza tu kuona kutofautiana moja kwa wakati mmoja. Hivyo kama hii ni nodi kwanza. Taarifa yeye si nodi, yeye tu pointer, na hii ndiyo sababu yeye inayotolewa kuwa tu ukubwa wa pointer, si moja ya mistatili wale full. Hivyo sisi ni kwenda kuangalia katika kila iteration ni 55 chini ya 9? Hakuna Ni 55 chini ya 17? Hakuna Chini ya 22? Chini ya 26? Chini ya 34? Na hivyo sasa, ni wazi Rainbow mali mwishoni. Hivyo kuwa wazi, na kile ilikuwa jina lako, Taylor? TAYLOR: Taylor. DAVID Malan: Hivyo miongoni mwa Taylor mkono wa kushoto na mikono Rainbow ya hapa, mkono ambao mahitaji ya uhakika katika kile katika ili kuingiza 55 katika orodha hii? Tufanye nini haja ya kufanya? Yeah? Watazamaji: mkono Taylor mahitaji ya uhakika wa kushoto. DAVID Malan: Hasa. Hivyo kuingiza nodi ndani ya mwisho wa orodha ni pretty rahisi kwa sababu Taylor tu ana uhakika, badala ya kwenye uwanja au tutaweza simu yake null, null ni aina ya kukosekana ya pointer au maalum sifuri pointer, uko kwenda kwa uhakika na kushoto yako mkono katika Rainbow na kisha Rainbow, ambapo lazima kushoto yako mkono pengine uhakika? Chini. Siyo nzuri kama mkono wake ni aina ya akizungumzia mbali hapa au aina yoyote ambayo njia. Ambayo yangeweza takataka thamani, lakini kama yeye anazungumzia baadhi thamani kujulikana, tutaweza kuiita sifuri au null, hiyo ni sawa kwa sababu tuna mrefu katika hii na tunajua orodha sasa ni kamili. Basi nini kingine rahisi kesi? Je, tunaweza malloc 5? Kuja juu juu. Jina lako ni nini? TIFFANY: Tiffany. DAVID Malan: Samahani? TIFFANY: Tiffany. DAVID Malan: Tiffany. Sawa. Tiffany imekuwa malloced kwa thamani ya 5. Kuja juu juu. Hii moja rahisi sana, lakini hebu fikiria utaratibu wa shughuli sasa. Ilikuwa ni rahisi sana na Taylor mwishoni. Namba 5 ni ya kweli chini ya 9, na hivyo tuna Daudi, tuna Tiffany, na ilikuwa ni nini jina lako? JAKE: Jake. DAVID Malan: Jake. Tiffany, Jake, na Daudi. Ambaye mkononi mwake lazima updated kwanza? Unataka nini cha kufanya hapa? Kuna wanandoa njia iwezekanavyo, lakini pia kuna moja au njia sahihi zaidi. Watazamaji: Anza na leftmost. DAVID Malan: Anza na leftmost. Nani leftmost hapa, basi? Watazamaji: wa kwanza. DAVID Malan: Sawa. Hivyo kuanza na kwanza na wapi wewe wanataka update mikono Daudi kuwa? Watazamaji: Kuelekea 5. DAVID Malan: Sawa. Basi Daudi, hatua tano au Tiffany hapa, na sasa? Watazamaji: Tiffany anazungumzia 9? DAVID Malan: Perfect, isipokuwa Binky ya kichwa tu aina ya ikaanguka, sawa? Kwa sababu nini mbaya na picha hii literally? Watazamaji: Hakuna ananyoosha kidole. DAVID Malan: Hakuna kitu akizungumzia Jake sasa. Tumekuwa literally yatima 9 na 17, na tumekuwa literally kuvuja yote ya kumbukumbu hii, kwa sababu kwa kuhuisha mkono wa Daudi kwanza, hiyo ni faini kadiri ni usahihi akionyesha Tiffany sasa, lakini kama hakuna mtu alikuwa mtizamo wa kumweka katika Jake, kisha tumekuwa waliopotea ukamilifu wa orodha hiyo. Basi hebu kutengua. Ili kwamba ilikuwa ni jambo jema kwa safari juu lakini hebu kurekebisha sasa. Tufanye nini kwanza badala yake? Yeah? Watazamaji: Tiffany lazima uhakika saa 9? DAVID Malan: Siwezi kupata kuwa karibu na wewe. Nani anapaswa uhakika saa 9? Watazamaji: Tiffany. DAVID Malan: zote haki. Hivyo Tiffany lazima hatua ya kwanza katika 9. Hivyo Tiffany inapaswa kuchukua juu ya thamani sawa Daudi, ambayo inaonekana kutokuwa na maana kwa muda, lakini hiyo ni nzuri kwa sababu sasa, pili hatua, sisi anaweza kuweka upya mkono wa Daudi kwa uhakika katika Tiffany, na kisha kama sisi tu aina ya safi mambo up kana kwamba hii ni aina ya spring-kama, sasa hiyo ni kuingizwa sahihi. Hivyo bora. Hivyo sasa tuko karibu na hapo. Hebu kuingiza mwisho moja thamani kama thamani 20. Kama tunaweza malloc kujitolea moja ya mwisho? Kuja juu juu. Hivyo hii moja ni gumu zaidi kidogo. Lakini kwa kweli, kanuni na tuko kuandika, angalau kwa maneno, ni kama kuwa na kundi ya kama hali sasa, sawa? Tulikuwa na hali kuangalia kama ni mali mwishoni, labda mwanzo. Tunahitaji baadhi ya aina ya kitanzi kwa kupata doa katikati. Basi hebu kufanya hivyo kwa nini jina lako? ERIC: Eric. DAVID Malan: Eric? Eric. Vyema kukutana na wewe. Hivyo tuna 20. Chini ya miaka mitano? Hakuna Chini ya tisa? Hakuna Chini ya 17? Hakuna SAWA. Yeye ni hapa na majina yenu tena ni? SUE: Sue. DAVID Malan: Sue. ALEX: Alex. DAVID Malan: Sue, Alex, na? ERIC: Eric. DAVID Malan: Eric. Mikono ambao wanahitaji kupata updated kwanza? Watazamaji: Eric. SAWA. Hivyo Eric inapaswa kumweka katika wapi? Katika 22. Nzuri. Na sasa nini hapo? Sue wanaweza kisha kumweka katika Eric na sasa, kama nyie tu kufanya baadhi ya chumba, ambayo ni nzuri kuibua, sasa tumefanya kuingizwa. Basi hebu sasa kufikiria swali lakini asante sana kwa kujitolea yetu. Vizuri sana kufanyika. Unaweza kuweka wale, kama wewe kama. Na tuna zimefunguliwa zawadi nzuri kama d kila kama kuchukua msongo mpira. Napenda tu kupita hii chini. Hivyo ni takeaway ya hii nini? Hii inaonekana kuwa ajabu kadiri tuna sasa ilianzisha mbadala kwa safu kwamba si hivyo kufungiwa kwa safu ya baadhi ya fasta ukubwa. Wanaweza kukua dynamically. Lakini kiasi kama tumeona katika kipindi cha wiki siku za nyuma, sisi kamwe kupata kitu chochote kwa ajili ya bure, kama hakika kuna biashara-off hapa. Hivyo, pamoja na suala la mafanikio ya uhusiano orodha, ni mabadiliko haya? Uwezo huu wa kukua na kusema ukweli, sisi wangefanya kufuta na tunaweza kuogopa kama inahitajika. Nini bei ni sisi kulipa? Mara mbili kama nafasi sana, kwanza ya yote. Kama ukiangalia picha, tena Mimi ni kuhifadhi orodha ya integers. Mimi kuhifadhi orodha ya integers pamoja na kuyatumia. Hivyo mimi nina mara dufu kiasi cha nafasi. Sasa, labda si kwamba kama mpango mkubwa ka 4, 8 ka, lakini inaweza hakika kuongeza up kwa seti kubwa data. Nini mwingine upande wa chini? Yeah? Watazamaji: Tuna traverse yao moja kwa moja. DAVID Malan: Yeah. Tuna traverse yao moja kwa moja. Unajua nini, sisi akatoa hii super rahisi hulka ya mraba mabano nukuu, vizuri zaidi inayojulikana kama random kupata, ambapo tunaweza tu kuruka kwa kipengele binafsi lakini sasa kama mimi bado alikuwa kujitolea yangu hapa, kama nilitaka kupata namba 22, siwezi tu Rukia mabano kitu kitu. Nina kuangalia juu ya orodha, sehemu kubwa kama kutafuta yetu mifano kwa mstari, kupata idadi 22. Hivyo sisi wanaonekana kuwa na kulipwa bei huko. Lakini tunaweza hata hivyo kutatua matatizo mengine. Kwa kweli, napenda kuanzisha michache tu ya vielelezo. Hivyo kama wewe tumekuwa chini ya Mather ya Dining Hall hivi karibuni, itabidi kukumbuka kwamba wao mwingi wa trays kama hii, sisi alikopa hizi kutoka Annenberg kabla darasani. Hivyo hii stack ya trays, ingawa, ni mwakilishi kweli muundo wa data ya sayansi ya kompyuta. Kuna muundo wa data katika sayansi ya kompyuta inayojulikana kama stack ambayo vizuri mno imejikita kwenye hasa hii ya kuona. Hivyo kama kila mmoja trays haya si tray lakini kama idadi na nilitaka kuhifadhi idadi, mimi inaweza kuweka moja chini hapa, na mimi naweza kuweka mwingine chini hapa, na kuendelea stacking idadi juu ya mtu mwingine, na nini uwezekano wa kusaidia kuhusu hili ni kwamba nini maana ya muundo huu data? Ambayo idadi naweza kujiondoa kwanza zaidi conveniently? Hivi karibuni kuweka moja juu ya hapo. Hivyo hii ni nini tunataka kuwaita katika sayansi ya kompyuta LIFO data muundo. Mwisho katika, nje ya kwanza. Na tutaweza kuona kabla ya muda mrefu kwa nini ambazo zinaweza kuwa na manufaa lakini kwa sasa, kufikiria tu mali. Na ni aina ya kijinga kama unadhani kuhusu jinsi ukumbi dining hufanya. Kila wakati wao trays safi na kuweka ndio freshest juu, unaweza kuwa na awali safi lakini hatimaye chafu sana na vumbi tray chini kabisa kama wewe kamwe kweli kupata chini ya kwamba stack, kwa sababu wewe tu kuendelea kuweka mpya na ndio safi juu yake. Kitu kimoja kinaweza kutokea katika maduka makubwa mno. Kama una kesi kuonyesha maziwa na kila CVS wakati au mtu anapata maziwa zaidi, wewe tu mkupuo maziwa ya tayari una kwa nyuma na kuweka ndio mpya juu mbele, wewe ni kwenda na baadhi pretty nasty maziwa mwishoni mwa muundo data, kwa sababu mara nyingi ni chini au equivalently mara nyingi ni nyuma. Lakini kuna njia nyingine ya kufikiri juu ya wamejipanga data na kwa mfano, hii. Kama wewe ni mmoja wa watu wale ambao anapenda kujipanga nje ya maduka ya Apple wakati bidhaa mpya anakuja nje, wewe pengine si kwa kutumia data mkusanyiko muundo kwa sababu wewe ingekuwa kuwatenganisha mtu mwingine ambaye ni wanaojitokeza kununua baadhi toy mpya. Badala yake, wewe pengine kutumia ni aina gani ya muundo wa data au ni aina gani ya mfumo katika ulimwengu wa kweli? Hopefully ni mstari, au zaidi vizuri au zaidi Uingereza-kama, foleni. Na zinageuka foleni ni pia data ya muundo katika sayansi ya kompyuta, lakini foleni ina sana mbalimbali ya mali. Siyo LIFO. Mwisho katika, nje ya kwanza. Hasha. Ni badala FIFO. Kwanza katika, nje ya kwanza. Na kwamba ni jambo jema kwa inadai hivyo haki hakika wakati wewe ni wamejipanga up super mapema asubuhi. Kama kupata huko kwanza, wanataka kupata nje ya kwanza pia. Na hivyo wote wa takwimu hizi miundo, foleni na mwingi na mashada ya wengine, zinageuka wewe Unaweza kufikiri ya hii kama tu safu. Hii ni safu, labda ukubwa fasta 4, lakini d kuwa aina ya nzuri kama tunaweza tu rundo trays karibu kubwa mirefu kama sisi na kwamba trays wengi au namba. Hivyo labda tunataka kutumia orodha wanaohusishwa hapa, lakini biashara-off ni kwenda kuwa uwezekano wa kwamba tunahitaji zaidi ya kumbukumbu, inachukua muda kidogo zaidi, lakini sisi wala kikomo urefu wa stack, kiasi kama Mather ya kuonyesha kesi inaweza kudhibiti ukubwa wa stack, na hivyo hawa ni maamuzi kubuni au chaguzi kwa hatima yetu. Hivyo, pamoja na data hizi miundo, tumekuwa kuanza kuona mipaka mpya juu ya uwezekano wa juu ya nini hapo awali alikuwa super haraka na ambapo tutaweza kuondoka mbali leo na ambapo tutaweza matumaini ya kupata ni siku ya Jumatano, tutaweza kuanza kuangalia data muundo kwamba unatuwezesha kutafuta kupitia data katika gogo mwisho wakati tena. Na tuliona kwamba, kukumbuka, katika wiki sifuri na moja na utafutaji binary au kugawanya na kushinda. Ni kuja nyuma na bado bora, grail takatifu kwa Jumatano hii itakuwa kuja na muundo wa data kwamba anaendesha kweli au kinadharia katika wakati mara kwa mara, ambapo haijalishi ni wangapi mamilioni au mabilioni ya mambo tuna katika muundo data, itakuwa kutupeleka wakati mara kwa mara, labda hatua moja au hatua mbili au hatua 10, lakini idadi mara kwa mara ya hatua kutafuta njia kwamba muundo data. Hiyo kweli itakuwa grail takatifu lakini zaidi juu ya kwamba siku ya Jumatano. Kuona ya basi. [Music kucheza]