[Halisi kucheza] DAVID J. Malan: zote haki hii ni CS50 na hii ni mwanzo wa wiki tano. Hivyo leo, chini ya kiti yako matakia, huwezi kupata kitu chochote. Lakini juu, unapaswa kupata hizi, kidogo ishara ya shukrani yetu kwa ajili ya yote ya kazi kwamba kuweka katika mchezo wa kumi na tano. Tu kuondoa mzunguko kidogo juu ya chini na kuanza kucheza kwa salio ya darasa. Hivyo kukumbuka kwamba, au kujua kwamba tatizo kuweka nne, ambayo akatoka mwishoni mwa wiki hii, inahusisha kuandika mchezo mwingine. Lakini wakati huu inahusisha kutumia halisi graphical user interface, si textual interface kama Mchezo wa kumi na tano ilikuwa. Na mchezo kwamba liko mbele yenu, kama wameweza bado kuonekana hii ya pili, inaonekana kitu kidogo kama hii. Mimi nina kwenda katika terminal yangu dirisha hapa katika GDB. Na mimi nina kwenda mbele na kukimbia wafanyakazi ufumbuzi, ambayo unaweza kupata baada ya mbio update 50 kama kawaida. Lakini mimi nina kwenda kuiweka katika kidogo siri mode, kidogo Pasaka yai, kinachojulikana Mungu mode, na kuweka Mungu katika argv1. Na mimi na kufuata maelekezo yangu mwenyewe, mbio katika yangu mwenyewe tatizo kuweka directory. Hivyo sasa unaweza kuona toleo kamili ya mchezo wa kuzuka. Kwa kweli, hii ni hakuna mikono mode. Hivyo ni kweli - wowed ingawa unaweza kuwa - pretty yasiyo na maana ya kutekeleza Mungu mode katika Kuzuka, tofauti na mchezo wa kumi na tano, ambayo baadhi yenu wanaweza kuwa na kukabiliana kwa ajili ya toleo hacker. Katika kuzuka Inatosha katika Mungu mode tu kufanya nini, shirikishi na paddle? Tu kufanya hivyo sawa na chochote nafasi ya usawa ni ya mpira. Na muda mrefu kama wewe kufanya hili katika lockstep na mpira kusonga mchezo huu mapenzi kamwe, daima, milele miss ya mpira na utasikia kushinda kila wakati. Lakini katika hacker toleo la wiki hii kuna zaidi kuliko tu mode Mungu. Kuna idadi ya makala mengine. Kati yao, lasers. Ili kwamba kama wewe kweli kupata papara wewe unaweza kuanza risasi chini matofali na wengine wachache. Na kwa wale ambao Ningependa calibrate kiwango dhidi hacker toleo, naona ya kuwa wiki hii hacker toleo makusudi ni zaidi kidogo doable, kusema, zaidi ya Mungu mode alikuwa pamoja na michezo ya kumi na tano. Hivyo kama wewe ni kuangalia kwa kunyoosha na wewe ni kuangalia kwa ajili ya kujifurahisha baadhi ya ziada makala kufanya dive katika kama ya riba. Sasa zaidi kivitendo, napenda uhakika nje jambo moja pia. GDB, ambayo baadhi yenu wanaweza kuwa bado kuguswa binafsi, ambayo ni nzuri. Lakini sasa ni kweli muda wa kupata kutumika kwa hii na starehe na chombo hiki sababu itakuwa kufanya maisha yako rahisi sana, kwa kweli. Kwa hotuba Rob juu GDB wanandoa ya wiki iliyopita, kukumbuka GDB kwamba ni debugger. Ni chombo kwamba inakuwezesha kuendesha yako mpango lakini kukimbia hivyo hatua kwa hatua ya mstari, na mstari, ili uweze poke kote, Basi utaona mambo yanayotokea, hivyo kwamba unaweza magazeti nje maadili ya vigezo. Kwa kifupi, inakupa hivyo zaidi nguvu zaidi kuliko printDef gani. Sasa admittedly, interface ni pretty arcane. Nyeusi na nyeupe textual interface kwa sehemu kubwa. amri ni kiasi fulani mgumu kukumbuka mara ya kwanza. Lakini hata ingawa inaweza kuchukua wewe nusu Saa, saa, ili kuweka kwamba upfront uwekezaji wa muda ndani yake, imani yangu. Hakika na mwisho wa muhula wa itakuwa kuokoa wewe utaratibu wa ukubwa zaidi muda zaidi ya hiyo. Hivyo mapema katika dive wiki in Na katika suala la kuzuka, tunajua kwamba wewe anaweza kufanya hili kwa muda mrefu kama una kanuni ya usambazaji au kanuni yako mwenyewe katika maendeleo katika saraka yako Pst4. Kujua kwamba unaweza kuendesha GDB / kuzuka.. Hii ni kwenda kufungua dirisha kama hii. Napenda kutoa mwenyewe zaidi ya dirisha terminal. Na kisha nini mimi kwenda mbele na kufanya, siyo tu kukimbia. Mimi nina kwenda kwanza kuweka hatua ya mapumziko kukumbuka, ambayo inaruhusu pause utekelezaji katika mahali fulani. Tu kuweka mambo rahisi mimi naenda kuvunja katika mstari mmoja tu kwa kuchapa namba moja. Hebu kweli re-wazi dirisha hili kwa sababu ni kupata kidogo kidogo huko. Hivyo nini mimi sasa kwenda kufanya hapa ni kama mimi kufungua terminal yangu dirisha. Haya, kuna sisi kwenda. Hivyo sasa kama mimi kurejea dropbox, Pst4 na kukimbia GDB. / kuzuka kuingia, taarifa Mimi nina kwenda kuvunja moja ya kuweka hatua ya mapumziko katika mstari mmoja. Na sasa mimi nina kwenda mbele na aina kukimbia. Na wakati mimi kufanya, taarifa chochote inaonekana kutokea. Hakuna hadi pop. Hakuna grafiki user interface bado. Lakini hiyo ni kueleweka kwa sababu mimi nina halisi katika mstari mmoja katika mpango wangu. Na taarifa kwamba nimepata haraka kupelekwa, hasa sasa hadi 62, kwa sababu kila mambo ya wakati juu ya faili hii ni mambo kama maoni na constants na uninteresting mambo kwa sasa. Hivyo sasa mimi nina ndani ya kuu, inaonekana, katika mstari wa 62. Na hii ni usambazaji kanuni, kukumbuka. Kama mimi kufungua hili kwa kwenda, vile vile, ndani ya tone yangu sanduku directory katika Pst4, katika breakout.c. Na kama mimi kitabu chini na chini na chini, na napenda kwenda mbele na kurejea kwenye line yangu namba. Nini mimi utaona, kama mimi kitabu chini ya mstari 62, ni hasa mstari kwamba tumekuwa paused juu. Hivyo mstari huu hapa, 62, ni ambapo sisi ni juu ya kuwa. Hivyo sasa katika GDB, kama mimi kwenda mbele na aina sasa ijayo, kuingia itakavyo nitafanya kuwa mstari. Na voilà, tuna kinachojulikana g dirisha. Kama usio wa kawaida na kile GWindow ni, si kuwa na wasiwasi. spec kuanzisha wewe kwa hiyo, kama vile idadi ya video walkthrough iliyoingia katika spec. Lakini sasa hebu kufanya hii kidogo zaidi ya kuvutia. Hebu hoja hii dirisha juu ya kwa upande kidogo. Napenda kufanya dirisha kidogo kubwa hivyo siwezi kuona zaidi. Na sasa napenda kwenda mbele na kufanya ijayo tena. Na kuna matofali yangu. Kama mimi aina ijayo tena sasa naona mpira. Na kama mimi aina ijayo tena sasa naona paddle. Na kwa bahati nzuri gedit hii si kweli kushirikiana kwa kunionyeshea kila kitu nataka. Lakini sasa kama mimi kufanya ijayo tena, ijayo tena, Mimi tu kutangaza baadhi ya vigezo. Na mimi unaweza magazeti yeyote ya haya guys nje. Magazeti matofali, prints maisha. Na sasa kama mimi kuendelea kufanya pili, taarifa kwamba mimi itakuwa ndani ya kitanzi kwamba. Lakini kanuni ni kwenda kutekeleza hasa kama mimi kutarajia. Hivyo wakati mimi hit kazi hii, Subiri kwa Click, ni kwenda kufanya ni halisi kwamba. Hivyo mimi walionekana wamepoteza kudhibiti juu ya mpango. GDB si kutoa yangu mwingine wa haraka. Lakini si kuwa na wasiwasi. Kwenda kwa mchezo wangu, bonyeza mahali fulani. Na voilà, sasa ni kuendelea kwa line ya 86. Hivyo tena, ni mchango mkubwa sana, hatimaye, kwa debugging matatizo. Kwa sababu unaweza literally hatua kupitia kanuni yako, magazeti mambo ya nje na kiasi, kiasi, zaidi. Lakini kwa sasa, wale zana peke yake lazima kupata pretty mbali. Hivyo sisi ni, bila shaka, kuchukua kuangalia saa Graphics sasa, kwa ghafla. Na sasa dunia yetu anapata kidogo ya kuvutia zaidi. Na unajua, pengine, kutoka kwa baadhi ya videos online kwamba tuna hizi kaptula kwamba tumekuwa kuangalia kama sehemu ya seti tatizo. Na wao tumekuwa risasi, kwa makusudi, dhidi ya kuongezeka nyeupe. Na baadhi yao kuwa na mafundisho Wenzake kuchora baadhi ya maandishi juu ya screen hiyo akaifunika upande wao. Lakini bila shaka, hii si yote ambayo kuvutia katika ulimwengu wa kweli. Hii ni ukumbi wa mihadhara wenye kubwa nyeupe screen na kuongezeka. Na uzalishaji wetu wa ajabu timu aina wa hufanya kila kitu kuangalia nzuri baada ya ukweli na mseto nje au vichwa kitu sisi kufanya au hawataki. Sasa tu kuwahamasisha wiki hii na kweli, ambapo unaweza kwenda, hatimaye, na sayansi ya kompyuta. Si tu baada ya tatizo kuweka nne. Lakini baada ya mwingine bila shaka au mzima mtaala ni ajabu nini unaweza kufanya siku hizi katika suala la graphics hasa. Baadhi yenu wanaweza kuona hii inapita karibu online. Lakini nilifikiri Ningependa kuonyesha wewe, kwa ajili tu ya dakika kadhaa, mtazamo wa kile teknolojia ya kompyuta na nini CGI, graphics kompyuta wanaweza kufanya siku hizi na wimbo ukoo na labda movie. [MUSIC - Lana Del RAY, "VIJANA NA BEAUTIFUL] SPIKA 1: Ni kidogo tu ajabu, pengine, tu jinsi omnipresent - [Makofi] SPIKA 1: Mimi tu kupakuliwa. Lakini ni kweli kushangaza, nadhani, tu jinsi omnipresent programu na kanuni na zana kama kweli hii ni. Hivyo kwamba ni ladha ya mwelekeo ambayo unaweza kwenda. Oh, hakuna Appliance zaidi leo. Naam, hiyo ni kweli kutisha majira kupewa uhakika Mimi tu walijaribu kufanya. Haki ya wote, hivyo hebu kuzindua Fusion tena. Unikumbushe baadaye. Haki zote, na unapaswa kuwa got email kama kando kama alivyofanya kupata taarifa kama hiyo. Haki ya wote, hivyo kukumbuka kwamba wiki iliyopita sisi kuanza peel nyuma hii baadaye inayojulikana kama kamba. kamba anakumbuka data aina hiyo ni alitangaza katika maktaba CS50. Na ni sehemu ya magurudumu mafunzo ambayo sasa kuanza kuchukua mbali. Ilikuwa ni dhana muhimu mapema. Lakini sasa ni kwenda kupata zaidi kuvutia na yenye nguvu zaidi ili kweli kuona kwamba chini ya Hood, kamba ni kile tu, je, sisi alisema? Yeah, hivyo ni kinachojulikana Char *. Na * kuna inaashiria kwamba kuna baadhi ya aina ya anuani ya kushiriki. Na hivyo wakati wewe kusema * Char wewe tu maana kutofautiana ambao data aina ni pointer sasa. ukweli kwamba kuna nyota kuna tu ina maana kwamba wewe ni kutangaza kinachojulikana pointer. Na pointer kwamba ni kwenda inaonekana kuhifadhi anwani ya, ya Bila shaka, char. Sasa kwa nini hii mantiki? Naam, kile ni kamba chini ya Hood? Naam, kwa baadhi ya wakati tumekuwa akisema kwamba string chini ya Hood ni tu h-e-l-l-o, kwa mfano. Lakini tumekuwa kuongelea hili kama kuwa, kimsingi, safu. Na safu ingekuwa basi kuangalia kidogo zaidi kama hii, na kila moja ya haya kuchukua bite. Na kisha tumekuwa alisema kwamba kuna kitu maalum nyuma hapa, backslash 0, au null Terminator. Hivyo muda wote huu, hii hapa imekuwa kamba. Lakini kwa kweli, kamba ni kweli anwani. Na anwani, kama tutaweza kuona, ni mara nyingi prefixed na 0x na mkataba. Je 0x kuashiria? Je, mtu yeyote kujua? Hivyo ni njia tu hexadesimoli. Hivyo unaweza kukumbuka, kwa kweli, kutoka PST 1, naamini, moja ya joto-up maswali ya kweli kuulizwa kuhusu hexadesimoli nukuu kwa kuongeza binary na decimal. Na motisha hapa ni kwamba na hexadesimoli una 16 maadili ovyo wako. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ikifuatiwa na, b, c, d, e, f. Na kama wewe kuhesabu hadi wale wote, kupata jumla ya 16. Hivyo hii ni tofauti na decimal, ambapo tuna 10 maadili, 0 kupitia tisa. Ni tofauti na kisha ambapo sisi tu 0 na 1. Lakini mwisho wa siku unaweza tu kuwakilisha nambari moja, lakini kwa njia tofauti. Na hexadesimoli ni ya kawaida kwa sababu kama zinageuka - na tutaweza kuona hii baadaye katika shaka - hata wakati sisi kupata na mtandao wa programu katika mazingira ya HTML na namba ya Michezo, hexadesimoli ni nzuri. Kwa sababu kila tarakimu, zamu nje, inawakilisha bits wanne kikamilifu. Hivyo ni aina tu ya mistari up nicely kama tutaweza hatimaye kuona. Hivyo hii inaweza kuwa Ox123 au kitu kama kwamba, denoting anuani 123 mahali fulani ndani ya yangu kompyuta kumbukumbu. Lakini bila shaka, baadhi ya matatizo yanajitokeza sababu ya hii msingi utekelezaji. Na kukumbuka kwamba mimi alichukua kumchoma katika utekelezaji wa kazi kama hii - kulinganisha dash 0 dot c wiki iliyopita, kwamba hata kama inaonekana kama ilikuwa kulia, ni tu hakuwa na kulinganisha mbili masharti usahihi. Nimekuwa kutupwa mbali kuu, na nimekuwa kutupwa mbali maoni tu kulenga katika juu ya kificho kwamba ni wa maslahi hapa. Na ni katika nyekundu kwa sababu ni Buggy. Kwa sababu gani? Naam, kuna wakati mimi juu alitangaza kamba, nini ilikuwa kweli kinachoendelea chini ya Hood? Naam, napenda kwenda juu kwa screen hapa na kuteka kwamba. Hivyo mimi alitangaza, tena, kamba s GetString. Hivyo nina kwenda mbele sasa na kuteka s kwa nini ni kweli ni. Ni kwenda kuwa mraba hapa. Na mimi nina kwenda kudai kwamba hiyo ni 32 bits. Angalau ni kawaida ni, angalau juu CS50 appliance katika mengi ya kompyuta. Mimi nina kwenda kwa simu yake ya. Lakini sasa kukumbuka kuwa sisi kuitwa GetString. Hivyo GetString anarudi, bila shaka, kamba. Kama aina user katika h-e-l-l-o kuingia kamba hujambo anapata akarudi. Na kamba kwamba, kama sisi tu alisema, mwisho hadi mahali fulani katika kumbukumbu ya kompyuta yako na 0 backslash mwishoni. Mimi itabidi kuteka hii kama safu - au contiguous block ya wahusika - kwamba ni kweli ni. Na sasa, ni nini GetString kweli kurudi? Nini GetString wamekuwa kurudi yote ya wakati huu? Naam, sisi kusema, katika wiki kabla, kuirudisha kamba. Lakini zaidi ya kitaalam, ni nini GetString kurudi inaonekana? Watazamaji: anwani. SPIKA 1: anwani. Hasa kuirudisha anwani ya bite kwanza kabisa, chochote ni. Mimi tu kuendelea kutumia moja, mbili, tatu kwa sababu ni rahisi. Kuirudisha anuani ya kwanza tabia katika kamba. Na sisi alisema wiki iliyopita kuwa kwamba ni wa kutosha. Kwa sababu tunaweza daima kufikiri ambapo mwisho wa kamba tu kwa iterating juu yake, labda, na kwa kitanzi au kitanzi wakati au kitu kama kwamba, kuangalia tu kwa "backslash 0", maalum sentinel tabia. Na kisha sisi kujua kwamba kamba hutokea kwa kuwa ya urefu - katika kesi hii - tano. Basi kitaalam nini GetString gani ni kuirudisha Ox123 katika kesi hii. Na utaalamu nini basi kinachotokea ni kwamba sisi kuhifadhi, ndani ya s, Ox123. Mwisho wa siku, hata kama hii ni dhana mpya, kuyatumia, wao ni tu vigezo. Lakini wao kutokea kwa kuhifadhi bits kwamba pamoja kuwakilisha anwani. Basi kitaalam yote wao anapata kuhifadhiwa katika s ni Ox123. Lakini sisi kama binadamu - ikiwa ni pamoja na kuendelea leo - ni kweli si kwenda huduma, kwa kawaida, nini anwani halisi ni baadhi ya chunk ya kumbukumbu. Ni tu kwa kiwango cha chini cha kina ili kuwa kielimu kuvutia. Hivyo nina kwenda kwa kamba hii. Na badala yake, zaidi ya kiwango cha juu, tu kusema kwamba wakati sisi ni kuzungumza juu ya kuyatumia Mimi naenda tu kuteka zaidi user-kirafiki mshale kwamba zinaonyesha huo wazo na ikisiri mbali maelezo ya yale halisi anuani ya msingi ni. Sasa kama sisi kurudi nyuma kwa kificho, ni nini kilichotokea wiki iliyopita kama tuna kamba t sawa GetString? Naam, kama mimi tena, aina katika hujambo wakati huu mimi nina kwenda kupata mwingine chunk ya kumbukumbu. h-e-l-l-o backslash 0. Lakini kwa sababu mimi kuitwa GetString mara ya pili - na ninajua hii kutoka kuangalia chanzo kanuni kwa GetString - hata ingawa ni kubahatisha kwamba hujambo mara typed katika mara mbili, GetString si kwenda kujaribu kuongeza na kuwa na wajanja. Ni tu kwenda kupata mwingine chunk ya kumbukumbu kutoka kwa kompyuta, ambayo ni kwenda kuwa katika anuani mwingine. Hebu kiholela tu kusema 456. Na kisha nini ni kwenda na kurudi? Ni kwenda na kurudi 456 na kuhifadhi katika t. Hivyo kweli ni nini kinachoendelea, juu ya upande wa mkono wa kushoto ni mimi na mwingine chunk ya kumbukumbu, 32 bits kawaida. Na huko ni kwenda Ox456. Lakini tena, Mimi si nia katika haya hasa idadi tena. Mimi tu kwenda abstractly kuteka ni kama mshale. Hivyo hii ni sasa maelezo mpya. Lakini ni sawa kamili wazo kwamba yakitokea wakati huu wote. Na hivyo sababu basi, kwamba hii ya kwanza toleo la kulinganisha mara Buggy wiki ya mwisho ni kwa nini? Wakati wa kufanya kama s ni sawa sawa na t ni wewe kweli chini ya Hood kulinganisha? Wewe ni kulinganisha anwani. Na tu shirikishi, kwa uwazi, Ox123 si kwenda Ox456 sawa. Wale idadi, wale bits ni tu tofauti. Na hivyo mara kwa mara, wiki iliyopita alisema unapoandika mambo mbalimbali, hata kama maneno walikuwa verbatim sawa. Hivyo sisi kurekebisha hii. Katika suala layman, nini ilikuwa fix? Watazamaji: Matumizi ya kazi. SPIKA 1: Matumizi ya kazi. Au nyota ni dhahiri wanaohusika, lakini kutumia kazi ya kufanya nini? Watazamaji: Ili kulinganisha masharti. SPIKA 1: Ili kulinganisha masharti. Hivyo tatizo la msingi hapa ilikuwa kwamba nilikuwa tu kuzingatia ubora wa masharti ya kuelezwa na kulinganisha ya anwani zao. Na ni wazi kwamba tu bubu sasa kwa mara nyingine wewe kuelewa nini kinaendelea chini ya Hood. Kwa kweli kulinganisha masharti ili kuona kama wao ni sawa katika njia ambayo binadamu bila kuzingatia masharti mbili kuwa sawa tunahitaji kulinganisha yao tabia kwa tabia kwa ajili ya tabia. Sasa mimi naweza kuwa na kufanyika hii sana tediously. Lakini familiarly, tuko kutumia kwa kitanzi. Na tu kulinganisha s bracket i dhidi ya t mabano i. s mabano i pamoja na 1 dhidi ya t bracket i pamoja na 1, na kadhalika, ndani ya baadhi ya aina ya kitanzi. Na kama mimi doa wahusika yoyote mbili ambazo tofauti, au kama mimi kutambua kwamba ooh, s ni mfupi kuliko t au muda mrefu zaidi ya t Naweza mara moja kusema uongo, wao siyo sawa. Lakini kama mimi kupata njia ya s na t na kusema sawa, sawa, sawa, sawa, sawa, mwisho wa wote masharti, naweza kusema kweli, ni sawa. Naam, nashiriki, miaka iliyopita mtu aliandika kwamba kanuni kwa ajili yetu. Na wao kuitwa ni StrComp kwa kamba kulinganisha. Na hata kama ni kidogo counter angavu, StrComp anarudi 0 kama wale mbili masharti, s na t ni sawa. Lakini kuirudisha thamani hasi kama s waje mbele t alphabetically au chanya thamani ikiwa ni lazima kuja baada ya t alphabetically. Hivyo kama wewe milele unataka kutatua kitu, zinageuka kuwa StrComp ni muhimu. Sababu haina tu kusema ndiyo au hapana, sawa au la. Ni anakupa hisia ya kuagiza kama nguvu kamusi. Hivyo StrComp, s comma t sawa sawa na njia 0 kwamba masharti ni kweli sawa. Kwa sababu mtu aliandika kazi huu miaka iliyopita labda kutumika kwa kitanzi au kitanzi wakati au kitu kama hicho kuunganisha tena juu ya wahusika na tena na tena. Lakini tatizo mbili akaondoka hapa. Hii ilikuwa copy0.c. Na mbili katika nyekundu ni sababu ni kiujanja. Na nini sisi kufanya hapa? Naam, kwanza mimi kuitwa GetString. Na mimi kuhifadhiwa thamani ya kurudi katika s. Hivyo kwamba ni pretty kiasi sawa kama hii sehemu ya juu ya picha. Lakini nini inakuja baada ya kwamba? Naam, napenda kwenda mbele na kujikwamua ya kundi zima la hii. Tutaweza rewind katika wakati ambapo sisi tu na s, ambayo sasa ni thabiti na mstari mmoja hadi huko. Mimi kuangalia. Kama s ni sawa sawa na 0. Sasa, haraka upande kumbuka, wakati wapate kurudi GetString 0? Kuna si kumbukumbu ya kutosha. Haki? Ni nadra kwamba hii kinaenda kutokea, hakika kwenye kompyuta hiyo ni got mamia ya megs au hata gigs ya RAM. Lakini inaweza, katika nadharia, kurudi 0, hasa kama mtumiaji hana kushirikiana. Kuna njia ya kujifanya kama una si inputted kitu na hila GetString katika kurudi 0 ufanisi. Hivyo ni kwenda kuangalia kwa ajili hiyo. Kwa sababu kama mtu wa kwenu wameanza kupata, tayari, makosa segmentation - ambayo ina pengine imekuwa chanzo ya kuchanganyikiwa baadhi ya - wale ni karibu daima matokeo ya kumbukumbu-kuhusiana makosa. Namna fulani wewe messed up kwa kuzingatia pointer, hata kama hukujua kulikuwa pointer. Hivyo unaweza kuwa ikiwa segmentation makosa kama mapema wiki moja kutumia kitu kama kwa kitanzi au wakati kitanzi na safu na kwenda mbali mno zamani ya mipaka ya safu baadhi ya kwamba wewe alitangaza, katika wiki mbili katika fulani. Unaweza wamefanya hivyo hata katika tatizo kuweka nne na kuzuka. Hata ingawa pengine hawajaona yoyote nyota katika kanuni ya usambazaji kwa Kuzuka, zinageuka kuwa wale GRect na GOval na wengine vile mambo, wale ni kweli kuyatumia chini ya Hood. Lakini Stanford, kama sisi, aina ya ngozi kwamba kina angalau kwa ajili ya maktaba madhumuni, kiasi kama sisi kufanya kwa kamba na * Char. Lakini GRect na GOval na wale wote mambo nyie ni au watakuwa kutumia wiki hii ni hatimaye kumbukumbu anwani. Wewe si tu kujua. Hivyo si ajabu basi, pengine, kwamba waweza safari juu ya baadhi ya segmentation makosa. Lakini nini kuvutia hapa sasa, kama baada ya sisi kuangalia kwa 0 sisi kufanya kamba t anapata s. Naam, napenda kutangaza t. Mimi nina kwenda kuteka ni kama mraba, 32 bits, simu yake t. Na kisha mimi naenda kufanya anapata s. Naam, hiyo ina maana gani? Naam, ni ngumu kidogo kufikiri kuhusu hilo picha ya busara. Lakini hebu fikiria kuhusu nini ndani ya x? Nini halisi ndani ya kutofautiana hii? Ox123 thamani. Hivyo wakati mimi kusema kamba t anapata s, kwamba tu likiwa na maana ya kuchukua idadi katika s, ambayo ni Ox123 na kuiweka Ox123. Au pictorially, kama mimi aina ya kufikirika mbali na undani kwamba ina athari za literally kufanya hili pia. Hivyo sasa, kufikiri nyuma wiki iliyopita wakati sisi tuliendelea kibepari T. mimi alifanya T mabano 0. Naam, T mabano 0, hata kama ni pointer, unaweza kutibu kama ingawa ni safu, na mraba bracket nukuu. Hivyo ambapo ni T mabano 0? Naam, ni h. Na hivyo wakati sisi kutumia kwamba mstari wa kanuni, mbili ya juu, ambayo ni kwa kuwa type.h c header faili, hiyo ambapo ni alitangaza. Wewe ni kuyafanyia hii H. Lakini ya Bila shaka, hiyo ni sawa kamili h kwamba ndani ya s, hivyo kusema. Na hivyo sasa una iliyopita au mtaji wote wawili awali na kinachojulikana nakala. Sababu hukutaka kufanya nakala katika njia ambayo binadamu wanataka iwe. Hivyo kile ilikuwa fix hapa, katika wiki ya mwisho copy1.c? Kazi, hivyo tunaweza kweli nakala kamba. Na kimsingi, nini tunahitaji kufanya ili nakala kamba? Naam, katika toleo hili kijani hapa mimi nina kwenda kufanya ni haki ya chini ya kiwango. Ni kweli kuna kazi waweze kusaidia kwa hili. Lakini moja ya msingi zaidi, na wengi moja ukoo, angalau, hivi karibuni kuwa familiar kwetu, ni yafuatayo - hivyo moja juu ya mstari wa kwanza wa kanuni katika kijani sasa. Mimi tu rewrote s kama * Char. Hakuna kazi tofauti huko. Mimi tu akatupa mbali na maktaba CS50 Mimi nina wito yake ni nini, * Char. Sasa dot, dot, dot, kwa sababu kulikuwa baadhi ya kuangalia kosa si kwamba kuvutia kwa majadiliano juu tena. Hivyo sasa ni alitangaza t. Hiyo pia ni * Char. Hivyo nilitoa mraba kidogo juu ya screen kama kabla. Lakini juu ya upande wa kulia, malloc, sisi alisema ni kumbukumbu kutenga. Hivyo kutenga baadhi ya chunk ya kumbukumbu. Na jinsi ka wengi kufanya sisi kweli wanataka kutenga, nini ni kuonekana? Naam, urefu wa kamba ya s. Hivyo kama ni hujambo kwamba kwenda kuwa tano. Tutaweza kusema h-e-l-l-o. Hivyo tano ka. Lakini basi pamoja na 1, kwa nini 1? Tabia 0. Kama hatuwezi kuondoka chumba kwa guy hii sisi ili kujenga hali ya ajali ambapo kamba ni h-e-l-l-o. Na kisha wakati ujao GetString ni kuitwa na mimi aina katika, kwa mfano, Daudi, D-a-v-i-d, kompyuta ni kwenda kufikiri kwamba s ni kweli h-e-l-l-o-d-a-v-i-d sababu kuna hakuna kuvunja katika kati ya maneno hayo. Hivyo tunahitaji kuwa mapumziko. Hivyo hatutaki tano. Tunataka ka sita. Na ka mimi kusema. Lakini ni kweli wakati ukubwa wa Char. Kitaalam Char ni karibu daima Byte moja. Lakini tu kufanya kanuni zetu portable, hivyo kusema, hivyo kwamba ni kazi ya tofauti kompyuta hata kama walivyotarajiwa kuwa tofauti kidogo chini ya Hood, mimi nina kwenda generically wanasema ukubwa wa Char ili kanuni yangu daima kazi. Na mimi hawana recompile tu kwa sababu mimi kuboresha kompyuta yangu au kutumia baadhi ya jukwaa tofauti. Hivyo mimi nimepata 6 ukubwa wa mara Char, ambayo hufanyika kuwa 1. Ili malloc njia inaweza nipe ka sita. Nini ni kwamba kweli kufanya? Vizuri, basi mimi unaendelea nyuma katika muda hapa ambapo sisi ni katika hadithi. Hivyo kama mimi kurejea hapa, nimekuwa alitangaza * Char kuitwa t. Nimekuwa sasa inaitwa malloc kwa ka sita. Na sasa mimi nina kwenda kuteka wale sita ka tu kama safu ya awali. Lakini mimi kwa kweli hawajui nini ndani ya safu hii. Kama wewe kutenga kumbukumbu zinageuka kuwa huwezi kuamini kwamba kuna baadhi ya inayojulikana thamani huko. Wangeweza kutumiwa na kitu mwingine, baadhi ya kazi nyingine, baadhi ya wengine mstari wa kanuni kwamba aliandika. Hivyo tutaweza ujumla kuwaita hawa takataka maadili na kuteka yao, pengine, kama alama ya kuuliza, tu kuonyesha kwamba sisi sijui nini ni kweli huko. Na kwamba hakuna mpango mkubwa ya muda mrefu kama sisi ni smart kutosha overwrite wale taka maadili na namba au chars kwamba sisi huduma ya juu. Hivyo katika kesi hii je, Mimi naenda kufanya nini? Naam, line yangu ya maadili ya ijayo, nina nne. int i kupata 0, n anapata urefu wa kamba s. Hivyo familiar kwa kitanzi. Mimi ni chini ya au sawa na n, ambayo kwa kawaida ni juu. Lakini wakati huu ni makusudi. I + +, na kisha mimi tu kufanya t mabano i anapata s. Kwa sababu picha yangu inaonekana kama hii katika wakati huu, kuhifadhiwa katika t ni anuani ya chunk kwamba random ya kumbukumbu ambao maadili ni haijulikani. Lakini kwa haraka kama mimi kufanya t bracket 0 kwamba unaweka mimi hapa. Na nini mwisho juu kupata inayotolewa huko? Sisi kuishia kuweka h. Kwa sababu hiyo ni nini saa s mabano 0. Na kisha kitu kimoja kwa ajili e, na l, na l, na o. n, kwa nini mimi kwenda juu kupitia sawa na n? Sababu ya tabia 0. Hivyo tu kuwa wazi, basi, kama mimi kwa kweli kufuta chochote haya ya takataka maadili ni kweli na kisha kuteka katika kile kutarajia, hii ni s mabano 1, 2, 3, 4, pamoja na hiyo trailing tabia mpya. Na hivyo sasa kama sisi iliendelea zamani dot, dot, dot katika toleo hili sahihi na mtaji t mabano 0 napenda, ya Bila shaka, kuwa kuyafanyia tu hii guy hapa, ambayo conceptually, ilikuwa hatimaye lengo. Hivyo kwamba ni pointer wote ni. Na tumekuwa kutumia yao kwa muda wa wiki sasa katika mazingira ya masharti. Lakini chini ya Hood wao uko kidogo ngumu zaidi. Lakini kama unafikiri juu yao katika hii fomu mchoro napendekeza kwamba wao ni pengine si inatisha kwamba wote kama wao wapate kwanza kuonekana katika mtazamo wa kwanza, hasa kwa vile syntax mpya. Maswali yoyote juu ya kuyatumia, masharti, au chars? Yeah? Watazamaji: Je, unaweza kurudi nyuma kwa [inaudible]? SPIKA 1: Uhakika. Watazamaji: Hivyo jinsi ya kuja katika sana yako ya mwisho mstari, huna t * Mpya na s * katika mstari? Je, si una kumbukumbu - SPIKA 1: Ah, swali zuri. Kwa nini si mimi kuwa t * na * s? Sababu kwa ufupi, wiki iliyopita, kama katika yetu wabadilishane kazi, mimi kusema kwamba wakati nimepata pointer njia ambayo wewe kwenda huko kama tulivyofanya kimwili juu ya hatua, ilikuwa kwa kweli kutumia operator nyota. Ni zinageuka kuwa hii mabano mraba- nukuu ni nini Tutamwita kisintaksia sukari, ambayo ni njia tu sexy ya akisema shorthand ni nukuu kwa nini hasa ni kuelezea. Lakini ni kidogo Intuitive zaidi. Na katika hatari ya kufanya hii wanaonekana zaidi ngumu kuliko mahitaji kwa kuwa, nini kweli kinachoendelea hapa ni yafuatayo - Kama mimi kusema * t kwamba maana ya kwenda anuani ya kuhifadhiwa katika t. Hivyo literally, kama t ni hifadhi ya anuani ya kwamba h awali, t * njia kwenda hapa. Sasa, je, t mabano 0 maana? Huo halisi kitu. Ni tu zaidi kidogo ya mtumiaji kirafiki kuandika. Lakini nina kufanyika bado. Siwezi kusema tu t * anapata * s. Kwa sababu gani mimi kuwa kufanya, basi? Ningependa kuwa na kuweka h, h, h, h, h katika jambo zima. Haki? Kwa sababu * t ni kwenda anuani katika t. Lakini sisi ni ndani ya kitanzi. Na thamani gani mimi incrementing, bila shaka, juu ya kila iteration? i. Lakini kuna nafasi hapa, sawa? Hata ingawa hii anahisi kama ni kupata kidogo kisasa zaidi kuliko nukuu mraba-bracket tumekuwa kutumika kwa muda - basi mimi tengua h wangu mabadiliko huko - hata ingawa hii sasa ni kupata kidogo fancier, wazo msingi, kama t * maana hapa na t * ni tu kwenda anuani katika t. Lakini kile ambacho kilikuwa anwani katika t? idadi sisi kuendelea kutumia? Kama Ox456, hebu kuleta kwamba nyuma tu kwa ajili ya majadiliano. Naam, kama nataka kupata saa e katika t kamba, mimi tu wanataka kwenda, kimsingi, 456. Au tuseme, 457. Mimi tu haja ya kuongeza moja. Lakini siwezi kufanya hivyo, haki? Kwa sababu t, hata kama mimi kuendelea kuchora sasa kama mshale, ni tu posta, Ox456. Na kama mimi kuongeza moja kwamba, au zaidi kwa ujumla, kama mimi kuongeza mimi kwa kuwa naweza kweli kupata hasa ambapo nataka. Hivyo kama mimi kwa kweli kufanya hili - na hii ni nini sasa inaitwa pointer hesabu - Naweza kuondoa mstari huu. Ambayo ni, kusema ukweli, nadhani wazi na zaidi kidogo ya mtumiaji wa kirafiki kusoma. Lakini hii ni si chini ya sahihi. Line hii ya maadili ya sasa ni kutumia pointer hesabu. Ni kusema kwenda kufuatia anwani - chochote mwanzo wa t ni, ambayo ni t plus i, ambayo awali ni 0, ambayo ni kubwa. Sababu hiyo ina maana ya mwanzo wa t pamoja na 1, plus 2, pamoja na 3, na kadhalika. Na mpango huo na s. Hivyo kisintaksia sukari kwa ajili hii. Lakini kuelewa nini kweli kinachoendelea chini ya Hood, napenda kusema, ni kweli ni muhimu katika yenyewe. Sababu ina maana sasa kuna si mengi zaidi uchawi kwenda kwenye chini ya Hood. Kuna si kwenda kuwa wengi zaidi tabaka kwamba tunaweza peel nyuma kwa ajili yenu. Hii ni c. Na hii ni programu. Nzuri kwa kweli swali. Haki wote, hivyo hii ni kwamba Buggy mpango mimi alikuwa akimaanisha mapema. wabadilishane ilikuwa kiujanja. Kama hawakuwa wanaonekana kazi. Kukumbuka kuwa tu kama maziwa na maji ya machungwa - ambayo mimi kuanza kunywa maandamano ya leo. Hivyo tu kama na maji ya machungwa na maziwa, hatukuwa na kutumia muda kutofautiana, TMP, kushikilia muda ili kwamba tunaweza kisha mabadiliko ya thamani yake na kisha update b. Lakini kazi hii, sisi alisema, au hii mpango ambapo kazi hii ilikuwa imeandikwa ilikuwa na makosa na dosari kubwa, kwa nini? Ndiyo? Watazamaji: [inaudible]. SPIKA 1: Hasa, wakati wewe piga wabadilishane - au zaidi kwa ujumla, wakati wewe kuwaita zaidi ya kazi yoyote - kama hoja ya kazi kwamba ni mali, hivyo kusema, ints na chars na mara mbili na ikifungwa, mambo bila nyota, wewe ni kupita katika nakala ya Hoja. Hivyo kama alikuwa 1 x na y alikuwa 2, ni kwenda kuwa 1 na b ni kwenda kuwa 2. Lakini wao wanaenda kuwa tofauti chunks ya bits, chunks tofauti ya kumbukumbu kwamba kutokea kwa kuwa hifadhi ya kufanana maadili. Hivyo kanuni hii ni super kamili saa swapping b na. Siyo nzuri katika swapping - katika mfano wa mwisho wa wiki - x na y. Sababu tena, wao ni katika upeo vibaya. Sasa, jinsi gani sisi kwenda kuhusu fixing hili? Tulikuwa na kufanya kazi kuangalia uglier kidogo. Lakini tena, fikiria nini hii ina maana tu. Na kweli, basi mimi, kwa ajili ya msimamo, kubadili jambo moja hivyo ni sawa na nini sisi tu alifanya. Kama nilivyoeleza wiki iliyopita, haina jambo ambapo unaendelea. Kwa kweli, kwa kawaida bila kuweka nyota karibu na jina kutofautiana. Lakini nadhani ingekuwa rahisi kidogo kufikiria * karibu na data aina kama maana ni pointer kwa int katika kesi hii. Hivyo kile mimi nafanya nini hapa? Mimi kusema wala kunipa int ikifuatiwa na int mwingine, wito wao na b. Nipe anwani ya int. Nipe anwani ya int mwingine. Kuwaita wale unashughulikia b na. Na kisha kwa kutumia nukuu * chini chini, kwenda kwa kila moja ya anwani wale kama zinahitajika ama kupata au kuweka thamani yake. Lakini kuna ubaguzi hapa. Kwa nini mimi si kuwa * karibu na TMP? Kwa nini mimi si kufanya hivyo, kwa mfano? Ni anahisi kama mimi lazima tu kwenda wote nje na kusahihisha jambo zima. Yeah? Watazamaji: [inaudible]. SPIKA 1: Mimi si alitangaza TMP kama kamba. Hivyo hii itakuwa kutangaza, katika kesi hii, TMP kuwa anuani ya int. Lakini si kwamba kabisa nini nataka, kwa michache ya sababu. Watazamaji: Wewe hawataki kubadilishana nao. SPIKA 1: Hasa, Sitaki wabadilishane kitu chochote na TMP. TMP ni tu wiki moja ya mambo ya ajabu. Yote nataka ni kutofautiana kuhifadhi baadhi ya simu. Mimi wala hata huduma kuhusu anwani za katika wakati huu. Mimi haja tu bits 32 au hivyo kuhifadhi int. Na mimi nataka kuweka katika bits wale 32 chochote si katika, hivyo kusema, lakini ni nini, tu kuwa sahihi zaidi. Kwa sababu kama ni anwani, * maana kwenda huko na kupata thamani 1. Kwa mfano, katika mfano wa wiki iliyopita au katika kesi ya b, kupata thamani ya 2. Basi nini kweli kinachoendelea? Basi mimi kuchora picha hapa kwamba mapenzi tu tease mbali sehemu ya leo. Lakini hii itaendelea kuonekana kwa muda kabisa. Hii, mimi kudai, ni nini kompyuta yako kumbukumbu inaonekana kama wakati kukimbia mpango, mpango wowote. Wakati kukimbia mpango saa ya juu sana ya RAM ya kompyuta yako - hivyo kufikiria hii mstatili, kweli, kama yako RAM ya kompyuta au kumbukumbu, kila 101 bilioni ka yake, kila bilioni mbili ka, kila gigabytes mbili ya mambo yake, chochote wingi una ni, hebu kuteka ni kama mstatili. Na mimi kudai kwamba wakati wewe kukimbia na mpango kama Microsoft Word au Chrome au kitu kama hicho, bits kwamba Microsoft au kwamba Google aliandika - katika kesi ya programu hizo - ni kubeba katika kumbukumbu ya kompyuta yako ambapo wanaweza kuuawa zaidi haraka na kulishwa ndani ya CPU, ambayo ni akili ya kompyuta. Na katika TAM wao ni kuhifadhiwa katika sana juu ya mpango wako, hivyo kusema. Kwa maneno mengine, kama hii ni chunk ya kumbukumbu, wakati wewe bonyeza mara mbili Microsoft Word, bits kuja mbali ya gari ngumu. Wao kupata kubeba katika RAM. Na tutaweza kikumbo yao hadi saa ya juu sana ya hii Mstatili conceptually. Naam, mapumziko ya kumbukumbu yako ni kutumika kwa ajili ya mambo mbalimbali. Saa ya juu sana, unaweza kuona initialize data na uninitialize data. Hii ina nini, kwa sehemu kubwa, na constants au vigezo kimataifa kwamba kuwa na maadili. Lakini zaidi juu ya wale wakati mwingine. Basi una chungu, ambayo tutaweza kuja nyuma. Lakini chini ni sehemu hiyo ni hasa germane hivi sasa. Ni stack kinachojulikana. Hivyo tu kama katika ukumbi yoyote zaidi D hapa chuo, una sania wale tu stack juu ya kila mmoja juu ambayo unaweza kuweka chakula na mengineyo. stack katika mfumo wa kompyuta ni sawa sana. Ila wakati tray, kama sisi kutumia katika dining hall, bila shaka, ni maana kubeba mambo sania au muafaka - kama tutaweza kuwaita - katika ya kompyuta kumbukumbu ni kutumika kushikilia vigezo na maadili. Hivyo kile kweli unaendelea chini ya Hood? Vizuri, basi mimi flip juu screen hapa. Na hebu mkazo tu kwa chini sehemu kwa muda. Kama hii ni sehemu ya chini ya yangu kumbukumbu ya kompyuta zinageuka wakati mimi piga kazi kuu - ambayo hufanyika, kusema ukweli, moja kwa moja kwa ajili yangu - Mimi kupata chunk ya kumbukumbu katika chini ya RAM yangu hivyo kusema. Na hii ni wapi kuu ni vigezo mitaa kwenda. Ni ambapo argc na argv labda kwenda, na vigezo yoyote mimi kutangaza ndani ya kuu. Wao kuishia chini ya RAM ya kompyuta yangu. Sasa tuseme kwamba wito kuu kazi kama wabadilishane, kama ilivyokuwa wiki iliyopita? Naam, sisi kimsingi kuweka tray mpya, mpya sura, kwenye chunk yangu ya kumbukumbu. Na mimi nina kwenda kuelezea hii kama mali ya kazi ya kubadilishana. Sasa nini ndani ya kubadilishana? Vizuri, kwa kuzingatia mpango wa wiki iliyopita na mmoja sisi tu kuona Excerpt kutoka, ndani ya sura ya kubadilishana, au juu ya kubadilishana ya tray, ni nini vigezo? Naam, na b. Kwa sababu wale walikuwa hoja yake ya ndani, pamoja na wa tatu, TMP. Hivyo kweli, mimi naweza kuteka hii kidogo zaidi cleanly. Hebu kwenda mbele na kuondoa studio. Na napenda kudai kwamba unajua nini? pengine ni kwenda kuishia hapa. B ni kwenda kuishia hapa. Na TMP ni kwenda kuishia hapa. Sasa, kuagiza nguvu kuwa tofauti kidogo. Lakini conceptually hii ni wazo. Na tu kwa pamoja, hii ni nini Tutamwita sura ya kubadilishana, au messi tray. Na mpango huo na kuu. Lakini mimi si redraw kwamba. Lakini hilo ambapo argc na argv na yoyote ya vigezo yake ya ndani kama x na y wapate kuwa kama vile. Hivyo sasa kufikiria nini kweli kinachotokea wakati wewe piga wabadilishane. Wakati wewe piga wabadilishane, utekelezaji wa kanuni kama hii, wewe ni kupita katika, katika Buggy toleo, b na kama nakala za x na y. Hivyo kama mimi sasa kuteka hii juu ya screen - got kupata bora katika hili - hivyo hadithi mimi alikuwa anawaambia kwa mwenyewe alikuwa katika toleo hili Buggy, wakati sisi kuwaita wabadilishane kupita katika literally na b kama integers, nini kweli kinachotokea? Vizuri, nini kweli kinachotokea ni hii. Hebu kwenda mbele na kuondoa tu wazi juu ya baadhi ya nafasi hapa. Hivyo hii ni kumbukumbu ya kompyuta yangu. Hivyo kama mimi, kwa mfano - kweli hebu kufanya hivyo kwa njia hii - kama mimi kudai kwamba hii ni x, hifadhi thamani 1 tu kama wiki iliyopita. Na hii ni y, kuhifadhi thamani 2 tu kama wiki iliyopita. Na hii ni kuu, wakati mimi wito wabadilishane, hivyo kutoa mwenyewe upatikanaji na b na TMP, mimi nina kwenda kudai kwamba hii ni na hii ni 1. Hii ni b. Hii ni 2. Hii inaitwa TMP. Na awali, ina baadhi ya thamani ya takataka mpaka mimi kweli kuhifadhi ndani yake, ambayo ni 1. Kisha mimi kwenda mbele na mabadiliko ya kuwa nini? B ya thamani. Na hivyo sasa mimi mbili hapa. Na kisha sisi alisema b anapata TMP. Tena, tu kama sanity kuangalia, ya tatu mstari wa kanuni hapa tu hii moja, b anapata TMP. Na hivyo mwishowe, nini mimi? Mimi kwenda mbele na kubadili b kuwa chochote thamani ya TMP ni, ambayo ni 1. Mimi wala kugusa TMP tena. Lakini sasa, tatizo ni haraka kama wabadilishane anarudi, kwa sababu si kuwapatia nyuma baadhi ya thamani, kuna hakuna kurudi kauli ya wazi katika hilo. Nini hasa kinatokea? Naam, kimsingi kumbukumbu hii yote - OK, inaonekana Raba anapenda moja tu ya kidole wakati huo - tu kutoweka. Sasa katika hali halisi si kwenda mahali popote. Lakini unaweza kufikiria ni sasa kama alama ya kuuliza. Sababu ni tena kweli katika matumizi. Na hakuna kitu inafanywa na maadili hayo. Hivyo katika kesi ya toleo la kijani la kanuni hii, nini badala yake ni kuwa kupita katika wabadilishane? Basi anwani. Basi anwani ya x na anuani ya y. Hivyo kama sisi re-kuwaambia hadithi hii moja ya mwisho muda, na mimi kwa kweli kuteka wabadilishane tena, lakini pamoja na kuyatumia, hii kuwa, hii kuwa b, na hii TMP kuwa, ni nini kweli kuhifadhiwa katika katika hii ya kijani toleo la kanuni yangu ambapo mimi nina kupita katika anwani? Ni kwenda kuwa pointer x. Ili niweze kuteka mshale. Lakini hebu kutumia holela huo mfano kama kabla. Hebu kusema kwamba hii ni kitu kama Ox123. Na hii ni kwenda kuwa Ox127 kwa sababu ni wanne ka mbali kwa sababu ni int, hivyo Ox127. Na tena, mimi kuchukua uhuru wa baadhi ya pamoja na namba. Wao ni ndogo sana kuliko wao ingekuwa kweli kuwa na utaratibu tofauti. Lakini hiyo ni jinsi gani picha sasa ni tofauti. Lakini wakati mimi kutumia kanuni hii ya kijani na mimi TMP int kupata *. * Njia ya kufanya yafuatayo, kuchukua kushughulikia kwamba katika na kwenda kwa hiyo, ambayo ni 1. Na kwamba ni nini mimi kisha kuweka katika TMP. Wakati huo huo, katika mstari wa pili wa kanuni hapa, * anapata b, hiyo ina maana gani? Naam, *, hivyo kwenda hapa anapata * b, ambayo ina maana ya kwenda huko. Na kwamba maana ya kuweka thamani na pale. Hatimaye, mstari wa mwisho wa kanuni tu alisema * b anapata TMP. Hivyo anasema b kwenda huko na overwrite ni pamoja na TMP ambayo, katika kesi hii, ni kwenda kuwa, tena, 1. Na hii ni kwa nini toleo la kijani la kanuni zetu matendo, ambapo nyekundu toleo kamwe alifanya. Ni wote tu majipu chini jinsi kumbukumbu ni kusimamiwa na ambapo ni kweli kuwekwa katika yako kompyuta RAM. Na kwa sasa, hiyo ni moja ya mambo kwamba stack ni kuwa kutumika kwa ajili ya. Maswali juu ya mpangilio? Juu ya kuyatumia? Au juu ya kubadilishana? Haki ya wote, hivyo malloc, kukumbuka, walifanya kitu kama hiki. Hii ilikuwa ni super rahisi mfano. Na hii ilikuwa ni moja kwamba Binky ilianzisha kwetu, angalau kabisa haraka, mwisho wa darasa. Dammit, kuna sisi kwenda tena. Hivyo kukumbuka kwamba hii ilikuwa mfano kwamba Binky ilianzisha kwetu, angalau kiasi fulani haraka mwisho wa darasa. Na hapa sisi kutumika malloc kweli kwa mara ya pili. Kwa sababu mara ya kwanza sisi kutumika kwa kujenga RAM kutosha, kutenga RAM kutosha kuhifadhi kamba. Wakati huu naendelea Binky ni rahisi. Hivyo ni kuhifadhi tu int, inaonekana. Na kwamba kabisa faini. Ni weird kidogo, kusema ukweli, kwa kutumia malloc kutenga moja int. Lakini hatua ya claymation Nick alikuwa kweli tu kuwaambia hadithi ya kile kinatokea au haina kutokea wakati wewe kuwatendea kumbukumbu. Hivyo katika kesi hii, mpango huu alifanya mambo machache. Katika kesi ya kwanza hapa, inatangaza pointer kuitwa x kwa int. Ni kisha anatangaza pointer kuitwa y int. Ni kisha maduka katika x, nini? Mtu mwingine sasa. Nini anapata kuhifadhiwa katika x kulingana na mstari wa tatu wa mpango huu? Watazamaji: [inaudible]. SPIKA 1: Naam, si kabisa ka, kwa kusema. Kuwa sahihi zaidi sasa. Nini anapata kuhifadhiwa katika x? anwani, nadhani habari hiyo. Hivyo nini malloc kurudi? malloc behaviorally kutenga chunk ya kumbukumbu. Lakini jinsi gani kukupa huduma hiyo? Kuirudisha nini? anuani ya Byte kwanza katika chunk ya kumbukumbu. Sasa, hii ni super rahisi. Ni moja tu Byte, ambayo ina maana ya kushughulikia sisi ni kupata nyuma ni anuani ya jambo zima. Hivyo kuhifadhiwa katika x basi, ni anwani ya kwamba chunk ya kumbukumbu. Wakati huo huo, nini kinatokea ijayo? Hivyo kweli, hebu kwenda mbele na kuteka hii kwa haraka nje ya kweli. Hivyo kama sisi kwenda juu ya screen hapa na sisi kucheza hii nje int * x na y * int ni kwenda kufanya nini kwa ajili yangu? Mimi kudai kwamba ni tu kwenda kufanya kitu kama hiki na kuiita x, na hii na kuiita y. Wakati huo huo, mstari wa tatu wa kanuni ni kwenda kutenga ukubwa wa int, ambayo hutokea kwa kuwa - pole kama nilivyosema moja kabla ya mimi maana moja int - wanne ka kwenye kompyuta ya kawaida. Angalau na appliance CS50. Hivyo hii ni ya kwenda kutenga yake, ambaye anajua? Mahali fulani nje hapa. Na hii ni kuhifadhiwa katika baadhi ya anuani ya ng'ombe, ambaye anajua? Lakini nini kinaendelea kupata akarudi ni kwamba anwani. Lakini tutaweza kuteka hii pictorially kama tu mshale kama hiyo. Sasa katika mstari wa pili * x anapata 42. Je * x maana katika suala layman? Tu kwenda huko. Kwenda kwa anwani hiyo. Au kwa maneno mengine, kufuata mshale na kuweka 42 huko. Lakini basi kitu mbaya kilichotokea kwa Binky, haki? Kumbuka kwamba line tano hapa, * y anapata 13, kwa kweli idadi ukorofi, alifanya nini kwa ajili yetu? Naam, * y njia kwenda huko. Naam, hii haijawahi kutolewa thamani bado, haki? kanuni hana y kuwa initialized na kitu chochote. Tulikuwa x kuwa initialized na anwani. Lakini y ilitangazwa juu juu. Lakini basi semicolon, hakuna thamani ilikuwa kweli kuweka ndani yake. Hivyo ni haki ya kuita hii thamani ya takataka. Nani anajua nini huko? Ni mabaki ya vipande kwamba walikuwa kutumika na baadhi ya mstari wa kanuni katika uliopita wangu wa mpango. Hivyo kama mimi kusema kwenda huko, hii ni kama, Mimi sijui ambapo mshale hii ni kwenda kuishia. Na kwamba wakati wewe kawaida kupata kosa segmentation. Kama ajali dereference, hivyo kuzungumza, au kwenda anuani si kwamba kweli anwani halali, mambo mabaya kutokea. Na kwamba ni nini hasa kilichotokea kufikiri Binky. Hivyo kukumbuka kwamba hadithi kwamba Nick alikuwa kuwaambia hapa ilikuwa wazo moja kama nini Nimekuwa inayotolewa na udanganyifu wa chaki ubaoni huko. X na y ni alitangaza. Kisha sisi zilizotengwa ukubwa wa int na kuhifadhiwa katika x. Kisha mstari unaofuata tulivyofanya * x. Hii ilikuwa ni Nick uchawi wand ya dereferencing. Kwamba kuweka 42 katika kumbukumbu alisema na x. Lakini hii ni ambapo mambo akaenda horribly vibaya. Haki? Sisi alijaribu y dereference. Lakini y alikuwa na baadhi ya thamani bogus, haki? Kwamba mshale katika chini upande wa kushoto kona, si kweli akizungumzia kitu. Ni aina ya kufanya kile Mimi alivyofanya hapa kwenye bodi. Hivyo mambo mabaya kutokea, segmentation kosa, au Binky kosa, katika kesi hii. Lakini kama sisi kisha kurekebisha kwamba kwa kufanya x anapata y jinsi gani mabadiliko ya hadithi? Naam, kama mimi kufanya x anapata y, hiyo ni ufanisi sawa na kusema chochote hii ni, ng'ombe-kitu ni kwenda kuwa sawa hapa, Ng'ombe-kitu. Au pictorially tutaweza kuteka mshale. Hivyo hapa juu ya bodi na Binky, na line ya pili ya kanuni, * y ina maana kwenda huko. Ambapo ni huko? Maana yake ni zaidi ya hapa. Na wakati sisi update kwamba kuwa 13 tu kwenda na inahusisha kuandika 13 hapa sasa. Hivyo labda kabisa moja kwa moja katika mtazamo wa kwanza. Lakini kwa kurejea na kutumia jargon huo kwamba Binky ilikuwa kutumia hapa, hivyo mbili ya kwanza kutenga kuyatumia, x na y, lakini si pointees. Na pointees si ujumla kutumika mrefu. Lakini pointer kabisa ni. Lakini ni nini kuwa alisema saa katika utaratibu wa majina Binky ya. Line hii ya pili, bila shaka, kutenga pointee int. Hivyo chunk ya kumbukumbu - kama nilitoa zaidi juu ya upande wa kulia hapo - na kuweka x sawa kwa uhakika na hilo. Hii x dereferences kuhifadhi 42 katika kumbukumbu kwamba ni akionyesha. Na kisha hii, bila shaka, ilikuwa kitu mbaya. Kwa sababu y hakuwa akizungumzia katika kitu bado. Hii kunasa yake. Hivyo hii ni bado Buggy mpango. Tu kwa sababu sisi ni unavuma kupitia kanuni ya mstari kwa mstari na kusema, oh vizuri, basi ni ajali huko. Hiyo ni kitu mbaya. Tabia mbaya ni mpango tu kwenda mimba kabisa katika mstari huo. Lakini kama ungekuwa na kuondoa kugonga kujipanga na badala yake na mawili ya mwisho mistari kuna hawawajui - kutumia pointer kazi - y kwa uhakika na x kama t uhakika. Na kisha wewe dereference y katika njia salama sana. Hivyo ambapo gani hii kuondoka sisi? Naam, zinageuka kuwa chini ya Hood katika maktaba CS50, kuyatumia ni kutumika katika. Na tutaweza kweli kuanza peel nyuma kwamba safu kabla ya muda mrefu. Lakini ni zamu pia, kujieleza kwamba baadhi yenu wanaweza kuwa na mazoea na, hasa wale vizuri zaidi, ni kweli kwamba ya maarufu sana tovuti, au kufurika stack, siku hizi. Lakini hii kweli ina sana kiufundi maana. Sisi sasa kujua stack ni. Ni kama mkusanyiko wa sania ndani ya ukumbi wa kulia chakula. Au ndani ya kompyuta yako kumbukumbu yake muafaka wale ambazo hutumiwa na utendaji. Naam, zinageuka kuwa sababu ya kwamba rahisi sana utekelezaji wa kumbukumbu na muafaka juu ya kinachojulikana stack, unaweza kweli kuchukua udhibiti ya mfumo wa kompyuta haki kwa urahisi. Unaweza hack katika mfumo kama watu kama sisi si imeandikwa code yetu hasa vizuri. Kama watu kama sisi kutumia chunks ya kumbukumbu au matumizi arrays - hata zaidi ya kawaida - lakini wakati mwingine kusahau kuangalia mipaka ya safu yetu kama waweza na wewe mwenyewe wakati mwingine, na iterated njia mbali sana siku za nyuma mwisho safu. Katika kesi bora, mpango wako ili tu kukwama. Segmentation kosa, aina ya aibu. Si kubwa, lakini siyo lazima Jambo imekuwa mbaya. Lakini kama mpango wako ni kweli juu ya mali watumiaji 'kompyuta, ikiwa ni mbio kwenye tovuti ya kwamba halisi random watu kwenye mtandao ni kupiga, kuruhusu watu kushawishi mambo mabaya juu ya kanuni yako ni ujumla si jambo zuri kwa sababu maana yake ni nafasi ya kuchukua udhibiti wa kompyuta. Na hii ni kwenda kuangalia kidogo fumbo. Lakini nilifikiri ningependa kuwatisheni ninyi kwa mfano huu mwisho hapa. Hapa ni mfano wa kanuni. Na kuna Wikipedia nzuri makala kwamba anatembea kwa njia ya hili kwa undani zaidi. Nina kuu juu ya wito chini foo, kupita katika argv ya 1. Na kwamba tu ili uweze kuendesha programu na kupita pembejeo holela. Na kisha foo ni alitangaza juu juu kama kukubali kamba, au zaidi usahihi, * Char. Ni kisha anatangaza safu ya chars. Kuiita buffer, kwa ujumla zaidi, ya ukubwa wa 12. Hivyo 12 chars unaweza fit ndani ya ya kwamba safu kuitwa c. Na kisha anatumia kazi huu mpya, ambayo ni mpya lakini si vigumu kuelewa, kumbukumbu nakala. Ni nakala ya kumbukumbu kutoka bar, ambayo ilikuwa kutofautiana zamani n, chochote mtumiaji typed katika argv 1 katika c. Ngapi ka? urefu wa kamba ya bar. Hivyo kwa maneno mengine, kama mtumiaji aina katika h-e-l-l-o kuingia, urefu wa kamba ya hodi ni tano. Hivyo tano ya ka wale ni kwenda kupata kunakiliwa katika safu kuitwa c, ambayo ni ya kawaida 12. Lakini nini mtumiaji aina katika sana tena neno hilo wahusika 13 au 14 wahusika au wahusika 100 au zaidi? Ambapo ni wao kwenda kwenda? Naam, kwamba sura, kwamba tray katika stack messi, wao wanaenda kwenda huko. Na ni tu kwenda kuanza overwriting mambo mengine kwamba tayari juu ya stack kwamba, imejazwa stack, hivyo kusema. Hivyo pictorially, kufikiria njia hii. Hii ni toleo la rangi ya picha tumekuwa kuchora. Chini, hebu sema, ni kuu. Na juu, nini wewe ni kuona sasa ni sura, rangi coded sasa, kwa kazi kuitwa foo. Lakini nini kuvutia hapa kuhusu foo ni kwamba hapa ni sura yake. Hivyo ni inayotolewa kama mimi alifanya lakini katika bluu mwanga. Na sasa hii ni mahali ambapo c mabano 0 unaendelea. Na hii ni pale c bracket 11 ni kwenda kuishia. Kwa maneno mengine, ni hutokea kwa ya kuwakilishwa kama mraba. Lakini kama wewe tu kuweka plopping ka chini - au chars - wao ni kwenda mwisho hadi saa eneo 0 njia yote hadi hadi 11 kwa sababu ni 0 indexed. Lakini pale ambapo ni tabia ya 13 kwenda kuishia? Ambapo wa 14? Ambapo ni tabia 50 kwenda kuishia? Ni kwenda kushika kwenda chini. Kwa sababu hata kama tumepata picha ya pamoja na stack kupanda juu, anwani, ni zamu nje, kwenda kutoka ndogo anwani, ndogo kuyatumia, kwa anwani kubwa. Hivyo tu anaendelea kwenda juu na juu. Hivyo kama mtumiaji aina katika hello, kwamba ni kubwa. Hakuna mdudu, hakuna tatizo, salama ya kila mtu. Lakini kama mtumiaji aina katika kile tutaweza piga kanuni ya ushindani, na kuwakilishwa mpangilio kama, mashambulizi, mashambulizi, mashambulizi, mashambulizi, nini kinaweza kutokea? Naam, kama wote wa pembejeo kwamba mtumiaji typed katika ni baadhi tu ya kirafiki au kukera kamba ya wahusika. Ni kweli mlolongo wa wahusika kwamba kama wewe ni compiled, ni kweli ni kanuni. Labda ni kificho kwamba hufuta kila files kwenye gari yako ngumu au anaye taka au kitu kama hicho. Taarifa kwamba nini msingi hapa ni kwamba kama mtu mbaya got bahati overwrite chunk nyekundu ya kumbukumbu - ambayo sikuweza kuteka juu ya picha yangu lakini hii picha hapa ina Wikipedia - wake kinachojulikana kurudi anwani. Wakati wa chakula anarudi, wakati wabadilishane anarudi, jinsi gani kompyuta kujua kwenda kutoka hadi hapa chini hapa? Au katika sehemu tech juu juu, jinsi gani kujua kwenda kutoka wabadilishane kanuni - 0 na 1 ya ambayo kutunga wabadilishane - nyuma kuu? Kuna kinachojulikana kurudi anuani kuhifadhiwa katika kwamba sura ile ile stack, juu ya huo mkahawa tray. Hivyo kama mtu mbaya ni wajanja kutosha kuweka kanuni ya mashambulizi, mashambulizi ya kanuni, mashambulizi kanuni, na kupata bahati ya kutosha - mara nyingi kwa njia ya majaribio na makosa - kwa overwrite kwamba nyekundu kurudi anwani, pamoja na anuani yake na tangazo ya juu sana. Taarifa 0835C080. Imeandikwa nyuma juu juu kwa sababu tutaweza labda kupitia upya. Hii ni kwamba idadi. Hivyo kama mtu mbaya anapata bahati ya kutosha au ni smart kutosha overwrite nyekundu strip ya kumbukumbu na anuani ya kificho kwamba yeye au yeye ana namna fulani hudungwa katika kompyuta yako, nadhani ambaye kanuni ni kwenda kurudishwa kwa haraka kama foo ni kosa utekelezaji? guy mbaya ya kanuni. Hivyo kanuni hii mashambulizi, AAA, tena, ili kutuma spam, ili kufuta mafaili yote kwenye gari yako ngumu. Lakini kwamba ni nini kweli kufurika stack ni, au overrun buffer, au buffer kufurika mashambulizi. Na ni incredibly, incredibly kawaida siku hii na mipango imeandikwa katika C, C + +, na hata baadhi ya lugha nyingine. Kumbuka kwamba inatisha, tutaweza mwisho kwa mzaha. [Kicheko] Kuona juu ya Jumatano. Saa CS50 ijayo - Hivyo mimi nina wote nje ya taa disk leo lakini kusubiri, mafuta ya bure maziwa, simu ya nusu kitabu, maji ya machungwa kwamba mimi kunywa leo. USB cable, bisibisi. [Halisi kucheza]