[Daqq tal-mużika] DAVID J. Malan: Kull dritt dan huwa CS50 u dan huwa l-bidu ta 'ħames ġimgħa. Allura llum, taħt kuxxini sedil tiegħek, m'intix ser issib xejn. Iżda fuq, għandek issib dawn, ftit token ta 'apprezzament tagħna għall- kollha tal-ħidma li inti tpoġġi fil-Game tal Ħmistax. Simply tneħħi l-ċirku ftit fuq il- qiegħ biex tibda playing għall- bqija tal-klassi. Allura jfakkru li, jew tkun taf li problema stabbiliti erba, li marru out dan il-weekend, jinvolvi kitba logħba oħra. Iżda din id-darba jinvolvi l-użu ta ' attwali user interface grafika, mhux interface testwali bħal Game tal-Ħmistax kien. U l-logħba li tinsab quddiem tal inti, jekk inti stajt għadhom ma rajt dan li jmiss, jistenna ftit xi ħaġa bħal din. Jien se jmorru fil terminal tiegħi tieqa hawn fil GDB. U jien ser jimxi 'l quddiem u tmexxi l- Soluzzjoni persunal, li inti tista 'aċċess wara running aġġornament 50 bħas-soltu. Imma jien ser jitqiegħdu fil-ftit modalità sigriet, bajd tal-Għid ftit, hekk imsejħa modalità Alla, billi tqegħid Alla fil argv1. U I għandhom jsegwu direzzjonijiet tiegħi stess, running fl tiegħi stess problema stabbiliti direttorju. Allura issa inti tara verżjoni kompluta tal-logħba tal tbegħid. Fil-fatt, dan huwa mod no-idejn. Allura huwa attwalment - wowed għalkemm inti tista 'tkun - pretty trivjali biex jimplimentaw modalità Alla Tbegħid, b'differenza Game tal-Ħmistax, li xi wħud minnkom setgħet tieħu ħsieb għall-edizzjoni Hacker. Fil tbegħid huwa biżżejjed f'Alla Mod li sempliċiment tagħmel dak, intuwittivament mal-jaqdfu? Just jagħmluha daqs ikun x'ikun l- pożizzjoni orizzontali tal-ballun. U sakemm inti tagħmel dan fil lockstep bil-ballun li jiċċaqilqu f'dan il-logħba se qatt, qatt, qatt jitilfu l-ballun u tkun taf tirbaħ kull darba. Iżda fl-edizzjoni Hacker din il-ġimgħa hemm aktar minn sempliċiment modalità Alla. Hemm numru ta 'fatturi oħra. Fost dawn, lasers. B'tali mod li jekk int verament tikseb paċenzja inti tista 'tibda UNOMIG-briks u ftit oħrajn. U għal dawk minnkom li tixtieq jikkalibra standard versus Hacker edizzjoni, I jista 'jara li din il-ġimgħa Edizzjoni Hacker deliberatament huwa ftit aktar doable, ngħidu aħna, minn Alla modalità kien ma Game tal-Ħmistax. Mela jekk inti qed tfittex għal stretch u qed tfittex xi gost addizzjonali karatteristiċi do adsa jekk ta 'interess. Issa aktar konkret, let me punt out ħaġa waħda kif ukoll. GDB, li xi wħud minnkom jista 'ma jkollhomx għadhom mimsus personalment, li huwa multa. Imma issa huwa verament il-ħin biex jidraw għal dan u komdu ma 'din l-għodda minħabba li se jagħmlu l-ħajja tiegħek ħafna aktar faċli, verament. Per lecture Rob fuq GDB koppja ta 'ġimgħat ilu, recall li GDB huwa debugger. Huwa għodda li ihallik run tiegħek programm iżda run pass pass, linja b'linja, sabiex inti tista 'poke madwar, sabiex inti tara l-affarijiet jiġri, hekk li inti tista 'jistampa valuri tal-varjabbli. Fil-qosor, tagħtik daqstant aktar enerġija minn printDef ma. Issa ċertament, l-interface hija pjuttost arcane. Iswed u abjad interface testwali għall-parti l-kbira. Il-kmandijiet huma kemmxejn iebsa li tiftakar fl-ewwel. Iżda anki jekk inti tista 'tieħu nofs siegħa, siegħa, li tikkontesta din bil-quddiem investiment ta 'ħin fis dan, trust me. Ċertament sa tmiem semestru tal se jiffrankaw inti ordni ta 'kobor aktar żmien minn dik. Daqshekk kmieni fil-ġimgħa adsa pulzieri U f'termini ta 'tbegħid, taf li inti tista 'tagħmel dan sakemm ikollok il-kodiċi ta 'distribuzzjoni jew il-kodiċi tiegħek fil-progress fl-direttorju Pst4 tiegħek. Taf li inti tista 'taħdem GDB. / Tbegħid. Dan se tiftaħ tieqa bħal dan. Ħalli nagħtikom myself aktar ta 'tieqa terminal. U allura dak li jien ser jimxi 'l quddiem u jagħmlu, huwa mhux biss run. Jien ser ewwel stabbilit punt tal-qasma recall, li tippermetti li inti nieqaf eżekuzzjoni f'post partikolari. Just li żżomm affarijiet sempliċi jien ser li jiksru fuq linja waħda biss billi jittajpja in-numru wieħed. Let me attwalment terġa 'tiftaħ il-tieqa għaliex dan huwa jkollna ftit żgħira hemmhekk. Allura dak li jien issa ser tagħmel hawnhekk huwa jekk I tiftaħ tieqa terminal tiegħi. Come on, hemm immorru. Allura issa jekk immur lura għall Dropbox, Pst4 u run GDB. / tbegħid jidħlu, avviż Jien ser jiksru wieħed biex jistabbilixxu punt waqfa fil-linja waħda. U issa jien se jmorru quddiem u tip run. U meta I do, avviż xejn jidher li jiġri. M'hemm l-ebda up pop. M'hemm l-ebda grafika user interface s'issa. Imma dak li jinftiehem għaliex jien litteralment fuq linja waħda fil-programm tiegħi. U tinnota li stajt fast mgħoddija, speċifikament issa sa 62, minħabba li kull l-għalf fil-quċċata ta 'dan il-fajl huwa affarijiet simili kummenti u kostanti u uninteresting Jittieħed għal issa. Allura issa jien ġewwa tal ewlieni, jidher, fil-linja 62. U dan huwa biss il distribuzzjoni kodiċi, recall. Jekk I miftuħa dan billi tmur, b'mod simili, fil-kaxxa drop tiegħi direttorju fis Pst4, fis breakout.c. U jekk I iscroll u 'l isfel u' l isfel, u let me go quddiem u mbagħad fuq linja numri tiegħi. What I ser tara, jekk I iscroll biex linja 62, huwa eżattament l-linja li konna waqfa qasira fuq. Allura din il-linja hawn, 62, huwa fejn aħna qed dwar li jkun. Allura issa GDB, jekk immur quddiem u tip issa jmiss, jidħol li għaddej biex tesegwixxi dik il-linja. U voila, aħna għandna l- hekk imsejħa g tieqa. Jekk familjari ma 'dak ta' GWindow huwa, biex ma tinkwetax. Il spec se jintroduċi inti għalih, kif ukoll numru ta 'videos walkthrough inkorporati fil-spec. Imma issa ejja jagħmlu dan ftit aktar interessanti. Let me jimxu fuq il-tieqa għall-ġenb ftit. Let me jagħmlu l-tieqa ftit akbar so I tista 'tara aktar. U issa let me imorru quddiem u jagħmlu li jmiss darb'oħra. U hemm briks tiegħi. Jekk tip I jmiss darb'oħra issa nara l-ballun. U jekk tip I jmiss darb'oħra issa nara l-jaqdfu. U fortunatament dan gedit mhuwiex verament jikkoperaw billi juru lili kollox irrid. Imma issa jekk nagħmel jmiss darb'oħra, jmiss darb'oħra, jien biss tiddikjara xi varjabbli. U I jistgħu jistampaw kwalunkwe wieħed ta 'dawn guys out. Briks Stampa, ħajja stampi. U issa jekk I tkompli tagħmel jmiss, avviż li jien ser tkun ġewwa ta 'dan loop. Iżda l-kodiċi se tesegwixxi eżattament kif I jistennew. Allura meta I hit din il-funzjoni, Stenna għall Ikklikkja, li għaddej biex tagħmel huwa litteralment dak. So I deher li tilef il-kontroll matul il-programm. GDB mhux qed jagħti lili ieħor pront. Iżda ma tinkwetax. Mur logħba tiegħi, ikklikkja x'imkien. U voila, issa tipproċedi għal-linja 86. Għalhekk għal darb'oħra, huwa imprezzabbli, finalment, għall-problemi debugging. Għaliex inti tista litteralment pass permezz kodiċi tiegħek, jistampa l-affarijiet barra u ħafna, ħafna, aktar. Iżda għal issa, dawn l-għodod biss għandhom inti tikseb pretty bogħod. Allura aħna qed, naturalment, tieħu ħarsa fil Grafika issa, kollha f'daqqa. U issa dinja tagħna gets ftit aktar interessanti. U inti taf, forsi, minn xi wħud mill- videos online li għandna dawn xorts li inti kont qed jaraw bħala parti ta 'settijiet problema. U ħadthom ġew maqtula, deliberatament, fuq sfond abjad. U xi wħud minnhom għandhom l-tagħlim Fellows tpinġija xi test fuq il- screen thats jinksew fuq in-naħa minnhom. Iżda naturalment, dan huwa mhux kollha li interessanti fid-dinja reali. Dan huwa biss sala lecture ma ' screen abjad kbar u sfond. U aqwa sort tagħna tim tal-produzzjoni ta 'jagħmel kollox tfittex sbieħ wara l-fatt billi ħsad out jew overlaying xejn nagħmlu jew ma jridux. Issa biss biex jimmotivaw din il-ġimgħa u verament, fejn inti tista 'tmur, finalment, ma 'xjenza tal-kompjuter. Mhux biss wara problema stabbiliti erbgħa. Iżda wara kors ieħor jew kollu kurrikulu huwa aqwa dak li tista tagħmel dawn il-jiem f'termini ta ' grafika partikolari. Xi wħud minnkom tista raw dan flowing madwar online. Imma ħsibt I d nuruk, għal ftit ftit minuti, idea ta 'dak teknoloġija tal-kompjuter u dak CGI, grafika tal-kompjuter tista 'tagħmel dawn il-jiem bil-kanzunetta familjari u forsi movie. [MUSIC - Lana DEL RAY, "Żgħażagħ u sbieħ] SPEAKER 1: Huwa biss ftit aqwa, forsi, kemm omnipreżenti - [Applause] SPEAKER 1: I biss jitniżżel. Imma huwa verament aqwa, I think, biss kif software omnipreżenti u l-kodiċi u għodod bħal dan verament huma. Allura dak togħma tad-direzzjoni fejn inti tista 'tmur. Oh, mhux aktar Appliance illum. Ukoll, li timing attwalment traġiku minħabba l-punt I biss ippruvaw jagħmlu. Kull dritt, hekk ejja tniedi Fużjoni darb'oħra. Ifakkru lili aktar tard. Kull dritt, u inti għandek ltqajna email bħala aside jekk inti ma jiksbu avviż bħal dik. Kull dritt, hekk ifakkar li ġimgħa li għaddiet bdejna biex titqaxxar lura din aktar magħrufa bħala sekwenza. string ifakkar tip data li l- iddikjarati fil-librerija CS50. U huwa parti mir-roti ta 'taħriġ li issa se tibda tieħu off. Kienet kunċett utli kmieni. Imma issa li għaddej biex tikseb aktar interessanti u aktar qawwija biex attwalment ara li taħt il-barnuża, string huwa biss dak, ma għidna? Yeah, dan huwa l-hekk imsejħa char *. U l-* hemm tindika li hemm xi tip ta 'indirizz involuti. U hekk meta inti tgħidli char * inti jfissirx biss varjabbli li tip ta 'data hija pointer issa. Il-fatt li hemm l-istilla hemm ifisser biss li inti tiddikjara li hekk imsejħa pointer. U li pointer se apparentement jaħżnu l-indirizz ta ', ta' ovvjament, char. Issa għaliex ma dan jagħmel sens? Ukoll, dak li huwa string taħt il-barnuża? Ukoll, għal xi żmien konna qed tgħid li string taħt il-barnuża huwa biss h-e-l-l-o, per eżempju. Iżda aħna ve tkellem dwar dan bħala jkunu, essenzjalment, firxa. U l-firxa mbagħad tfittex ftit aktar bħal dan, ma 'kull wieħed minn dawn bidu gidma. U allura aħna stajt qal li hemm xi ħaġa speċjali lura hawn, il- backslash 0, jew null terminatur. Allura dan il-ħin, dan hawn kien string. Imma verament, string hija attwalment indirizz. U l-indirizzi, kif Ser naraw, huma ta 'spiss prefissi bil 0x minn konvenzjoni. X'tagħmel 0x jindikaw? Hawn xi ħadd jaf? Allura dan ifisser biss hexadecimal. Allura inti tista 'recall, attwalment, minn Pst 1, nemmen, wieħed mill-warm-up mistoqsijiet attwalment mistoqsi dwar eżadeċimali minbarra binarja u deċimali. U l-motivazzjoni hawnhekk huwa li ma hexadecimal għandek 16 ċifri għad-dispożizzjoni tiegħek. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, segwita minn a, b, c, d, e, f. U jekk inti għadd dawk kollha up, ikollok total ta '16. Allura dan huwa b'kuntrast ma ' dećimali, fejn għandna 10 numri, 0 permezz disa. Huwa b'kuntrast mal-binarju fejn aħna biss għandhom 0 u 1. Iżda fl-aħħar tal-ġurnata inti tista 'biss jirrappreżentaw l-istess numri, iżda kemmxejn differenti. U hexadecimal huwa komuni għaliex kif jirriżulta - u aħna ser tara dan aktar tard fil-kors - anke meta nikbru l-ipprogrammar web fil-kuntest ta ' HTML u l-kodiċi tal-kulur, hexadecimal huwa sbieħ. Minħabba li kull ċifri, jirriżulta, tirrappreżenta erba bits perfettament. Għalhekk biss tip ta 'linji up nicely kif aħna ser eventwalment tara. Allura dan jista 'jkun Ox123 jew xi ħaġa bħal dik, li turi l-indirizz 123 x'imkien ġewwa tal tiegħi memorja tal-kompjuter. Iżda naturalment, jinqalgħu xi problemi minħabba dan sottostanti implimentazzjoni. U tfakkar li I ħa stab fuq implimentazzjoni ta 'funzjoni bħal dan - jqabblu sing 0 dot c aħħar ġimgħa, li anki jekk dehru qishom kien dritt, hija sempliċement ma qabbilx żewġ kordi korrett. Stajt tintrema prinċipali, u stajt jintefa bogħod l-kummenti biss biex tiffoka fuq il-kodiċi li l-'interess hawnhekk. U huwa bl-aħmar għaliex dan huwa Buggy. Għal liema raġuni? Ukoll, fil-quċċata hemm meta I ddikjarat string, dak li kien verament għaddejjin taħt il-barnuża? Well, let me jmorru fuq l- iskrin hawn u jqabbluhom. So I iddikjarat, għal darb'oħra, string s GetString. Hekk jien ser jimxi 'l quddiem u issa jiġbed s għal dak li hu verament. Huwa ser tkun kwadru hawn. U jien ser titlob li dan huwa 32 bits. Mill-inqas huwa normalment hi, inqas fuq il-CS50 apparat fil-lott ta 'kompjuters. Jien ser sejħa hija s. Imma issa jfakkru li aħna imsejħa GetString. Prospetti hekk GetString, naturalment, string. Jekk it-tipi utent fil-h e-l-l-o jidħol l-sekwenza bonjour gets lura. U li string, kif aħna biss qal, truf up x'imkien fil-memorja tal-kompjuter tiegħek ma 'backslash 0 fl-aħħar. I ser tiġbed bħall-firxa - jew blokk kontigwi ta 'karattri - li fil-fatt hu. U issa, dak li huwa GetString attwalment jirritornaw? Dak li GetString ġie jirritornaw kollha ta 'dan iż-żmien? Well, nistgħu ngħidu, fil-ġimgħat minn qabel, dan jirritorna string. Iżda aktar teknikament, dak ma GetString ritorn apparentement? UDJENZA: An indirizz. SPEAKER 1: An indirizz. Speċifikament dan jirritorna l-indirizz ta ' l-ewwel gidma, tkun xi tkun. I biss iżommu użu ta 'wieħed, tnejn, tlieta għaliex dan huwa konvenjenti. Dan jirritorna l-indirizz ta 'l-ewwel karattru fis-sekwenza. U aħna qal aħħar ġimgħa li li huwa biżżejjed. Minħabba nistgħu dejjem insemmu fejn l-aħħar tas-sekwenza biss billi iterazzjoni fuqha, forsi, ma 'għall- loop jew filwaqt li loop jew xi ħaġa simili li, biss tfittex għal "backslash 0", l-karattru speċjali sentinella. U allura aħna nafu li l-sekwenza jiġri li jkun ta 'tul - f'dan il-każ - ħamsa. Allura teknikament dak GetString ma huwa dan jirritorna Ox123 f'dan il-każ. U teknikament dak allura jiġri huwa li aħna taħżen, ġewwa ta 'i, Ox123. Fl-aħħar tal-ġurnata, anke jekk din huwa kunċett ġdid, pointers, dawn qed biss varjabbli. Iżda jiġri li jaħżnu bits li jirrappreżentaw kollettivament l-indirizz. Allura teknikament kollha li gets maħżuna s huwa Ox123. Iżda aħna bħala bnedmin - inklużi illum onward - huma verament mhux se kura, tipikament, dak l-indirizz attwali hija ta 'xi blokki ta' memorja. Huwa biss mal-livell baxx ta 'dettall li jkun intellettwalment interessanti. Hekk jien ser teqred dan. U minflok, livell aktar għoli, biss jgħidu li meta aħna qed jitkellem dwar pointers Jien ser biss jiġbed aktar arrow faċli għall-utent li twassal l- istess idea u astratti bogħod l- dettalji ta 'dak l-attwali indirizz sottostanti huwa. Issa jekk immorru lura għall-kodiċi, liema ġara aħħar ġimgħa jekk ikollna string t ugwali GetString? Ukoll, jekk I darb'oħra, tip bonjour dan iż-żmien jien ser tikseb ieħor fi blokki ta 'memorja. h-e-l-l-o backslash 0. Iżda minħabba I imsejħa GetString għat-tieni darba - u naf dan mill tħares lejn l- source code għall GetString - anke għalkemm huwa koinċidenza li bonjour kien ittajpjat fil darbtejn, GetString mhuwiex ser jippruvaw jottimizzaw u tkun għaqlija. Huwa biss se tikseb ieħor fi blokki ta ' memorja mill-kompjuter, li hija se tkun fuq indirizz ieħor. Ejja ngħidu biss arbitrarju 456. U allura dak huwa se jirritorna? Huwa ser jirritorna 456 u jaħżnu f't. Allura dak li hu verament għaddej, fuq il- naħa tax-xellug huwa Għandi ieħor fi blokki tal-memorja, 32 bits tipikament. U fil hemm se jmorru Ox456. Iżda għal darb'oħra, jien ma interessati f'dawn numri partikolari jibqgħalu. Jien biss ser astratt tiġbed bħala vleġġa. Allura dan issa huwa spjegazzjoni ġdida. Imma hija l-istess idea eżatt li l- kien jiġri dan il-ħin. U għalhekk l-raġuni allura, li din l-ewwel verżjoni tal tqabbel kien buggy aħħar ġimgħa huwa għaliex? Meta inti tagħmel jekk i ugwali ugwali t X'Ser verament taħt il-barnuża jitqabblu? Inti jitqabblu l-indirizzi. U biss intuwittivament, b'mod ċar, Ox123 mhux se ugwali Ox456. Dawn in-numri, dawk bits huma biss differenti. U għalhekk konsistenti, ġimgħa li għaddiet huwa qal inti tip affarijiet differenti, anke jekk il- kliem kienu verbatim-istess. Allura aħna jiffissaw dan. F'termini layman, dak li kien l-jiffissaw? UDJENZA: Uża funzjoni. SPEAKER 1: Uża funzjoni. Jew istilel huma definittivament involuti, imma jużaw funzjoni biex jagħmlu dak? UDJENZA: Biex tqabbel il-kordi. SPEAKER 1: Biex tqabbel il-kordi. Allura l-problema fundamentali hawn kien li I kien biss tikkunsidra l- kwalità ta 'kordi li għandhom jiġu definiti mill- paragun ta 'indirizzi tagħhom. U ovvjament dan huwa biss mutu issa darba inti tifhem x'inhu għaddej taħt il-barnuża. Biex verament tqabbel kordi biex tara jekk dawn qed ugwali fil-mod li bniedem jikkunsidraw żewġ kordi li jkun ugwali għandna bżonn biex iqabblu lilhom karattru għal karattru għall-karattru. Issa I seta 'jsir dan ħafna tediously. Iżda familjari, aħna qed tuża għall-loop. U biss jqabblu bracket s i kontra t bracket i. s bracket i plus 1 kontra t bracket i plus 1, u oħrajn, ġewwa xi tip ta 'loop. U jekk I post xi żewġ karattri li differenti, jew jekk Nifhem li ooh, s hija iqsar minn t jew itwal minn t I jista 'immedjatament ngħid falza, dawn mhux qed l-istess. Imma jekk jien jiksbu permezz iu t u jgħidu istess, l-istess, l-istess, l-istess, l-istess, tmiem ta ' kemm kordi, nista 'ngħid veru, huma ugwali. Ukoll, B'xorti tajba, sena ilu xi ħadd kiteb li kodiċi għall us. U huma qalu li din StrComp għal string jqabblu. U anki jekk huwa kontro ftit intuwittivi, StrComp prospetti 0 jekk dawk żewġ kordi, iu t huma l-istess. Iżda dan jirritorna valur negattiv jekk i Għandu jiġi qabel t alfabetikament jew valur pożittiv jekk hu għandu jaqa ' wara t alfabetikament. Mela jekk inti qatt tixtieq li sort xi ħaġa, jirriżulta li StrComp huwa utli. Għaliex ma biss jgħidu iva jew le, ugwali jew le. Dan jagħtik sens ta 'tordna bħal Jista dizzjunarju. Allura StrComp, s comma t tkun daqs ugwali 0 tfisser li l- kordi huma verament ugwali. Minħabba min kiteb din il-funzjoni snin ilu preżumibbilment użati għall loop jew filwaqt li loop jew xi ħaġa bħal dik biex jintegraw aktar l-karattri mill-ġdid u għal darb'oħra u għal darb'oħra. Iżda tnejn problema nħolqot hawn. Dan kien copy0.c. U t-tnejn bl-aħmar huwa għaliex dan huwa difettuż. U dak li ma nagħmlu hawn? Ukoll, qabel I imsejħa GetString. U jien maħżuna l-valur tar-ritorn fl-i. Allura dak pretty ħafna l-istess bħal din il-parti ta 'fuq tal-istampa. Imma dak li jiġi wara dak? Well, let me imorru quddiem u jeħles ta mazz sħiħ ta 'dan. Aħna ser kontrina fil-ħin biex fejn aħna biss jkollhom i, li issa huwa konsistenti ma ' linja waħda up hemm. I check. Jekk i ugwali egwali għal 0. Issa, nota naħa quick, meta jista GetString ritorn 0? Hemm ma memorja biżżejjed. Dritt? Huwa rari li dan jiġri, ċertament fuq kompjuter li l- ltqajna mijiet ta 'megs jew anki gigs ta 'RAM. Iżda tista ', fit-teorija, ir-ritorn 0, speċjalment jekk il- utent ma tikkoperax. Hemm modi biex nippretendu simili ikollok ma xejn inputted u trick GetString fis jirritornaw 0 effettiv. Allura li għaddej biex jiċċekkja għal dan. Għaliex jekk kwalunkwe inti bdew tikseb, diġà, difetti segmentazzjoni - li x'aktarx ilha sors ta 'xi frustrazzjoni - dawn huma kważi dejjem l-riżultat ta 'memorja relatati żball. B'xi inti messed up fir-rigward ta ' pointer, anki jekk inti ma jirrealizzaw kien hemm pointer. Allura inti jista 'jkollok indotta segmentazzjoni difetti kmieni kemm ġimgħa li jużaw xi ħaġa bħal għal loop jew waqt loop u l-firxa minn esaġerata passat il-konfini ta 'xi firxa li inti ddikjarat, f'żewġ ġimgħa partikolari. Inti jista 'jkollok għamlu dan anki fil-problema stabbiliti erba bi tbegħid. Anke jekk inti probabilment ma bbenefikawx stilla fil-kodiċi tad-distribuzzjoni għal Tbegħid, jirriżulta li dawk GRect u GOval u oħrajn affarijiet bħal dawn, dawk huma attwalment pointers taħt il-barnuża. Iżda Stanford, bħalna, tip ta 'ġlud li jiddettalja mill-inqas għal-libreriji skopijiet, simili ħafna nagħmlu għal string u char *. Iżda GRect u GOval u kollha ta 'dawk affarijiet inti guys huma jew se tuża din il-ġimgħa huma finalment indirizzi memorja. Inti biss ma jafu. Għalhekk mhuwiex sorprendenti allura, forsi, li inti tista 'vjaġġ fuq xi difetti segmentazzjoni. Imma x'hemm interessanti hawn issa, jekk wara we jiċċekkja għal 0 nagħmlu string t gets s. Well, let me tiddikjara t. Jien ser tiġbed bħala kwadru, 32 bits, sejħa hija t. U allura jien ser tagħmel gets s. Well, dak ma jfisser? Ukoll, huwa ftit diffiċli li wieħed jaħseb dwar dan stampa għaqli. Imma ejja jaħsbu dwar x'hemm ġewwa ta 'x? X'hemm litteralment ġewwa dan il-varjabbli? Il Ox123 valur. Allura meta I say string t gets s, li ftit tfisser litteralment tieħu n-numru fil i, li huwa Ox123 u poġġih Ox123. Jew pictorially, jekk I tip ta 'astratt bogħod minn dak dettall hija għandha l- effett ta 'litteralment tagħmel dan ukoll. Allura issa, naħseb lura għall-aħħar ġimgħa meta aħna ipproċediet biex kapitalist T. I għamlet T bracket 0. Ukoll, T parentesi 0, anki jekk huwa pointer, inti tista 'titratta dan bħala għalkemm huwa ta 'firxa, bi kwadru notazzjoni bracket. Għalhekk, fejn huwa T bracket 0? Ukoll, huwa l-h. U hekk meta nużaw dik il-linja ta 'kodiċi, tnejn ta 'fuq, li huwa f'dak c type.h fajl tal-header, li fejn huwa ddikjarat. Inti kapitalizzazzjoni dan H. Iżda Naturalment, dak l-istess h eżatt li l- ġewwa ta 'i, biex ngħidu hekk. U hekk issa inti nbidlu jew kapitalizzat kemm l-oriġinali u l- hekk imsejħa kopja. Għaliex inti ma tagħmel kopja fil- mod li bniedem tkunx tixtieq li jkun. Allura dak li kien l-tiffissa hawn, fl-aħħar ġimgħa copy1.c? Funzjonijiet, hekk nistgħu attwalment kopja-sekwenza. U fundamentalment, dak li għandna bżonn li jagħmlu sabiex kopja-sekwenza? Ukoll, f'dan il-verżjoni aħdar hawn jien se tagħmel dan livell pjuttost baxx. Hemm effettivament il-funzjonijiet dawn jistgħu jgħinu ma 'dan. Iżda l-aktar waħda bażika, u l-aktar waħda familjari, għall-inqas, dalwaqt se tkun familjari għalina, huwa dan li ġej - għalhekk wieħed fuq l-ewwel linja tal-kodiċi fl-aħdar issa. I biss rewrote s bħala char *. M'hemm l-ebda funzjonali differenza hemmhekk. I biss threw bogħod il-librerija CS50 u Jien ssejjaħ dak li hi, char *. Issa dot, dot, dot, minħabba li kien hemm xi verifika żball li mhux interessanti biex jitkellmu dwar mill-ġdid. Allura issa t hija ddikjarata. Huwa wisq huwa char *. So I ġibdet kwadru ftit fuq l-iskrin bħal qabel. Iżda fuq in-naħa tal-lemin, malloc, għidna huwa memorja allokati. Allura jalloka xi blokki ta 'memorja. U kemm bytes għandna attwalment tixtieq li jallokaw, ma jidhirx? Ukoll, it-tul sensiela ta 's. Mela jekk huwa bonjour dan huwa se tkun ħamsa. Aħna ser jgħidu h-e-l-l-o. Allura ħames bytes. Iżda mbagħad plus 1, għaliex 1? Il-karattru 0. Jekk aħna ma jħallu spazju għal dan Guy aħna jistgħu aċċidentalment joħolqu sitwazzjoni meta l-sekwenza huwa h-e-l-l-o. U allura l-ħin li jmiss hu GetString imsejħa u I tip, per eżempju, David, D-a-vs-i-d, il-kompjuter huwa għaddej li jaħsbu li s huwa attwalment h-e-l-l-o-d-a-vs-i-d għaliex hemm ebda waqfa fl bejn dawn il-kliem. Għalhekk għandna bżonn li break. Allura aħna ma rridux ħamsa. Irridu sitt bytes. U bytes I say. Imma huwa daqs tassew ħin ta 'char. Teknikament char huwa kważi dejjem f'byte wieħed. Iżda biss biex jagħmlu kodiċi tagħna portabbli, biex ngħidu hekk, b'tali mod li taħdem fuq kompjuters differenti anke jekk dawn jistgħu jkun kemmxejn differenti minn taħt il- barnuża, jien ser ġenerikament jgħidu daqs tal char sabiex kodiċi tiegħi dejjem xogħol. U jien ma jkollhom recompile hija biss minħabba I jaġġornaw il-kompjuter tiegħi jew l-użu xi pjattaforma differenti. Allura stajt ltqajna 6 darbiet id-daqs ta ' a char, li jiġri li jkun 1. Allura dan ifisser malloc jistgħu tagħti me sitt bytes. X'inhu li fil-fatt jagħmlu? Well, let me roll lura fil-ħin hawn biex fejn ninsabu fl-istorja. Mela jekk jien tmur lura hawn, stajt iddikjarat a char * imsejjaħ t. Stajt issa msejjaħ malloc għal sitt bytes. U issa jien ser tiġbed dawk sitta bytes bħad-firxa qabel. Imma I attwalment ma nafx x'hemm ġewwa dan array. Jekk inti talloka memorja jirriżulta li inti ma tistax fiduċja li hemm xi valur magħrufa hemmhekk. Dan jista 'jkunu ġew użati minn xi ħaġa inkella, xi funzjoni oħra, xi oħrajn linja tal-kodiċi li inti kiteb. Allura aħna ser ġeneralment sejħa dawn żibel valuri u tiġbed minnhom, forsi, kif trade marks in kwistjoni, biss li jindika li aħna ma nafx x'hemm attwalment hemm. U li l-ebda big deal sakemm aħna huma intelliġenti biżżejjed biex jissostitwixxu dawk Valuri taż-żibel bin-numri jew Chars li aħna jimpurtahom. Allura f'dan il-każ dak li jien se jagħmlu? Ukoll, il-kodiċi linja tiegħi ta ' jmiss, I jkollhom erba. Int I nikseb 0, n gets l- tul sensiela ta 's. Allura familjari għal loop. I hija inqas minn jew ugwali għal n, li normalment huwa ogħla. Iżda dan iż-żmien huwa intenzjonat. I + +, u mbagħad I sempliċiment tagħmel t bracket i gets s. Minħabba stampa tiegħi tidher bħal dan fil dan il-mument, maħżuna t hija l- indirizz ta 'dik blokki każwali ta' memorja Valuri tagħhom huma magħrufa. Iżda hekk kif nagħmel t bracket 0 li tpoġġi me hawn. U dak jispiċċa jkollna mfassla hemmhekk? Aħna jispiċċaw tqegħid h. Għaliex dan huwa dak i fil s bracket 0. U allura l-istess ħaġa għall- e, u l, u l, u o. n, għaliex ma mmur up permezz ugwali għal n? Minħabba l-karattru 0. Hekk biss tkun ċara, allura, jekk I attwalment iħassar kwalunkwe dawn żibel Valuri huma u mbagħad fil-fatt tiġbed dak I jistennew, dan huwa s parentesi 1, 2, 3, 4, plus thats batuta karattru ġdid. U hekk issa jekk aħna kompliet passat il-dot, dot, dot f'dan il-verżjoni korretta u kategorija kapitalizzat t 0 I għandux, Naturalment, jiġu kapitalizzazzjoni biss dan Guy hawn, li kunċettwalment, kien finalment il-għan. Allura dak l-pointer huwa. U inti stajt ilhom jużawhom għal ġimgħat issa fil-kuntest ta 'spag. Iżda taħt il-barnuża li qed ftit aktar kumplessa. Imma jekk inti taħseb dwarhom f'dan forma bl-istampi nipproponi li dawn qed probabbilment mhux kollha li scary kif jista 'jidher l-ewwel mad-daqqa t'għajn, partikolarment ma 'tali sintassi ġdid. Kwalunkwe mistoqsijiet dwar pointers, kordi, jew jaħraq? Yeah? UDJENZA: Tista 'tmur lura għall-[inaudible]? SPEAKER 1: Sure. UDJENZA: Allura kif jidħlu fil aħħar tiegħek ħafna linja, inti ma għandekx * linja t u * i fil-linja? M'għandekx ikollok-referenza għall-- SPEAKER 1: Ah, kwistjoni verament tajba. Għaliex ma I jkollhom * t * u s? Minħabba fil-qosor, l-aħħar ġimgħa, bħal fil tagħna tpartit funzjoni, I ma jgħidu li meta inti stajt ltqajna pointer l-mezzi li inti tmur hemm kif għamilna fiżikament fuq il-palk, kien li fil-fatt jużaw l-operatur star. Jirriżulta li din square-bracket notazzjoni huwa dak li aħna ser sejħa sintattika zokkor, li huwa biss mod sexy ta ' qal huwa notazzjoni shorthand għal eżattament dak li qed tiddeskrivi. Imma hija ftit aktar intuwittivi. U għar-riskju ta 'teħid din jidhru aktar ikkumplikata milli jeħtieġ li jkun, x'inhu verament jiġri hawn fuq huwa dan li ġej - Jekk ngħid * t li jfisser mur l-indirizz maħżuna t. Allura litteralment, jekk t hija ħażna l-indirizz ta 'dik h inizjalment, * mezzi t mur hawn. Issa, dak ma t bracket 0 jfisser? Ħaġa eżatt istess. Huwa biss aktar faċli ftit friendly li tikteb. Imma jien ma isir s'issa. I ma tistax biss jgħidu * t gets * i. Minħabba dak li nkun tagħmel allura? I d tkun tqegħid h, h, h, h, h matul il-ħaġa sħiħa. Dritt? Minħabba * t hija tmur għall-indirizz f't. Iżda aħna qed ġewwa ta 'loop. U liema valur am I inkrementazzjoni, naturalment, fuq kull iterazzjoni? i. Iżda hemm opportunità hawn, id-dritt? Anke jekk dan iħoss bħal huwa jkollna ftit aktar sofistikati mill-notazzjoni square-bracket konna użati għal xi żmien - let me jneħħu bidla h tiegħi hemm - anke jekk din issa qed jkollna ftit fancier, l-idea bażika, jekk * t ifisser hawn u * t huwa biss mur l-indirizz f't. Imma dak li kien l-indirizz fl t? In-numru inżommu tuża? Bħal Ox456, ejja idaħħlu dak lura biss għall-fini ta 'diskussjoni. Ukoll, jekk nixtieq nikseb fil-e fl t string, I biss trid tmur, essenzjalment, 456. Jew pjuttost, 457. I biss bżonn li żżid waħda. Imma I tista 'tagħmel dan, id-dritt? Minħabba t, anki jekk I iżommu tpinġija issa bħala vleġġa, huwa biss numru, Ox456. U jekk I żid għal dan, jew aktar ġeneralment, jekk I żid I ta 'dak I tista' fil-fatt tikseb eżattament fejn irrid. Mela jekk jien fil-fatt jagħmlu dan - u dan huwa dak li issa msejjaħ aritmetika pointer - I tista 'tneħħi din il-linja. Liema hija, franchement, I think aktar ċara u aktar utent ftit faċli biex jinqara. Iżda dan huwa mhux inqas korretta. Din il-linja tal-kodiċi issa qiegħda tuża aritmetika pointer. Huwa qal tmur għall- indirizz li ġej - tkun xi tkun il-bidu ta 't huwa, li huwa t plus i, li inizjalment huwa 0, li hija kbira. Minħabba dan ifisser il-bidu ta 't plus 1, flimkien ma '2, miżjuda bi 3, u oħrajn. U l-istess jittrattaw s. Zokkor hekk sintatttiku għal dan. Imma fehim x'inhu verament għaddej taħt il-barnuża, nixtieq jargumentaw, huwa attwalment utli u fih innifsu. Għaliex dan ikun ifisser issa hemm mhux ħafna aktar magic jiġri taħt il-barnuża. Hemm mhumiex ser ikunu ħafna aktar saffi li nistgħu Qaxxar għalik. Dan huwa ċ. U dan huwa l-ipprogrammar. Verament tajba kwistjoni. Kull dritt, u għalhekk din kienet l buggy programm I kien qed jirreferi għal qabel. swap kien difettuż. Jekk ma jidhirx li jaħdmu. Ifakkar li bħad mal-ħalib u il-meraq tal-larinġ - li bdejt xorb dimostrazzjoni tal-lum. Hekk biss bħala bil-meraq tal-larinġ u l-ħalib, aħna ma għandek tuża varjabbli temporanja, TMP, li jkollhom temporanjament b'tali mod li nistgħu mbagħad bidla valur tagħha u mbagħad taġġorna b. Iżda din il-funzjoni, għidna, jew dan programm li fih din il-funzjoni kienet miktuba kienet żbaljata u difettuż, għaliex? Iva? UDJENZA: [inaudible]. SPEAKER 1: Eżattament, meta inti sejħa swap - jew b'mod iktar ġenerali, meta inti sejħa aktar xi funzjoni - jekk l-argumenti għal dik il-funzjoni huma primittiv, biex ngħidu hekk, ints u Chars u doubles u sufruni, affarijiet mingħajr stilla, inti tgħaddi fil-kopja ta ' l-argument. Mela jekk x 1 kien uy kien 2, a va li jkun 1, u b se tkun 2. Iżda dawn qed tmur biex tkun biċċiet differenti ta 'bits, biċċiet differenti ta' memorja li jiġri li tkun ħażna valuri identiċi. Allura din il-kodiċi huwa super perfetta fi iskambji au b. Hija l-ebda tajba fil jagħmlu skambju - fl-eżempju ġimgħa li għaddiet - xuy. Minħabba darb'oħra, dawn qed fl-ambitu ħażin. Issa, kif ma immorru dwar l-iffissar dan? Kellna biex jagħmlu l-funzjoni tfittex uglier ftit. Iżda għal darb'oħra, jikkunsidraw dak dan ifisser biss. U fil-fatt, let me, għall-konsistenza, bidla ħaġa waħda hekk huwa identiku għal dak li aħna biss għamlet. Kif semmejt aħħar ġimgħa, ma jimpurtax fejn tmur. Fil-fatt, tipikament inti tpoġġi l- star ħdejn l-isem varjabbli. Imma jien naħseb li jkun ftit aktar faċli tikkunsidra l-* li jmiss għall- tip ta 'data fis-sens huwa pointer għal int f'dan il-każ. Allura dak am I tagħmel hawn? Jien qal ma jagħtux me int segwit minn int ieħor, ssejjaħ minnhom u b. Agħtini l-indirizz ta 'int. Agħtini l-indirizz ta int ieħor. Sejħa dawk tindirizza u b. U mbagħad tuża l-notazzjoni * isfel hawn taħt, mur kull wieħed minn dawk l-indirizzi kif meħtieġ biex tikseb jew jew sett valur tagħha. Iżda hemm eċċezzjoni hawn. Għaliex I ma jkollhom * jmiss TMP? Għaliex għandi ma tagħmel dan, per eżempju? Hija tħoss bħal I għandhom biss jmorru kollha out u jikkoreġu l-ħaġa sħiħa. Yeah? UDJENZA: [inaudible]. SPEAKER 1: I ma dikjarati TMP bħala sekwenza. Allura dan ikollu jiddikjara, f'dan il-każ, f'TMP li tkun l-indirizz ta 'int. Iżda li ma tantx huwa dak li nixtieq, għal ftit ta 'raġunijiet. UDJENZA: Inti ma tridx li tpartit lilhom. SPEAKER 1: Eżattament, Ma rridx li tpartit xejn ma TMP. TMP huwa biss Jittieħed ġimgħa waħda. All I trid hu varjabbli biex jaħżnu xi numru. Jien ma anki kura dwar l-indirizzi f'dan il-mument. I biss bżonn 32 bits jew hekk biex jaħżnu int. U nixtieq li tqiegħed f'dawk 32 bits kwalunkwe ma jkunx, biex ngħidu hekk, iżda dak li huwa fi, biss biex tkun iktar preċiża. Għaliex jekk huwa indirizz, * mezz jmorru hemm u jiksbu l-valur 1. Per eżempju, fl-eżempju ġimgħa li għaddiet jew fil-każ b tal, jiksbu mill-valur 2. Allura x'inhu verament għaddej? Let me tfassal stampa hawn li se tease apparti biss parti tal-lum. Iżda dan se jibqgħu jidhru għal żmien pjuttost twil. Dan, nitlob, huwa dak tal-kompjuter tiegħek memorja qisu meta inti tmexxi programm, kwalunkwe programm. Meta inti tmexxi programm fuq nett ta 'RAM kompjuter tiegħek - sabiex jaħsbu dan ir-rettangolu, verament, kif tiegħek RAM jew memorja tal-kompjuter, kollha 101 biljun bytes ta 'dan, kull żewġ biljuni ta bytes, kollha żewġ gigabytes ta 'dan, tkun xi tkun il-kwantità għandek huwa, ejja tiġbed bħala rettangolu. U jien jsostnu li meta inti tmexxi programm bħal Microsoft Word jew Chrome jew xi ħaġa bħal dik, l-bits li Microsoft jew li Google kiteb - fil-każijiet ta 'dawk il-programmi - huma mgħobbija fil-memorja tal-kompjuter tiegħek fejn jistgħu jiġu esegwiti aktar malajr u mitmugħa fil-CPU, li huwa l-imħuħ tal-kompjuter. U fil TAM dawn qed maħżuna fil-ħafna quċċata tal-programm tiegħek, biex ngħidu hekk. Fi kliem ieħor, jekk dan huwa blokki ta ' memorja, meta inti ikklikkja darbtejn fuq Microsoft Word, il-bits come off-hard drive. Huma jiksbu mgħobbija fil RAM. U aħna ser shove lilhom up fuq nett ta 'dan ir-rettangolu kunċettwalment. Ukoll, il-bqija tal-memorja tiegħek huwa użat għall-affarijiet differenti. Fuq nett tara initialize data u uninitialize data. Dan għandu ma, għall-parti l-kbira, mal- kostanti jew varjabbli globali li għandhom valuri. Iżda aktar fuq dawk ieħor żmien. Imbagħad għandek l-borġ, li aħna ser terga 'lura għal. Iżda fil-qiegħ hija l-parti li l- partikolarment germane dritt issa. Hu l-munzell hekk imsejħa. Allura eżatt bħal fil-maġġoranza f'kull sala D hawn fuq kampus, inti għandek trejs dawk li biss munzell fuq quċċata ta 'xulxin li inti tista 'tpoġġi l-ikel u whatnot. Il-munzell ta 'sistema tal-kompjuter huwa simili ħafna. Ħlief billi l-trej, kif nużaw fil -sala dining, naturalment, huwa maħsub biex iwettqu affarijiet-trejs jew il-frejms - kif aħna ser sejħa minnhom - fi tal-kompjuter memorja huwa użat biex iżomm varjabbli u valuri. Allura dak li verament tmur fuq taħt il-barnuża? Well, let me flip fuq għall-iskrin hawn. U ejja tiffoka biss fuq il- parti t'isfel għal mument. Jekk dan huwa l-porzjon qiegħ tal tiegħi memorja tal-kompjuter jirriżulta meta I sejħa tal-funzjoni prinċipali - li jiġri, franchement, awtomatikament għalija - I nikseb blokki ta 'memorja fil- qiegħ ta 'RAM tiegħi biex ngħidu hekk. U dan huwa fejn l-prinċipali varjazzjonijiet lokali go. Huwa fejn argc u ARGV forsi imorru, u kwalunkwe varjabbli I tiddikjara ġewwa ta 'prinċipali. Huma jispiċċaw fil-qiegħ ta 'RAM kompjuter tiegħi. Issa ejja ngħidu li s-sejħiet ewlenin ta 'funzjoni bħal tpartit, ma bhalu aħħar ġimgħa? Well, aħna essenzjalment tpoġġi trej ġdid, qafas ġdid, fuq blokki tiegħi ta 'memorja. U jien ser tiddeskrivi dan bħala jappartjenu għall-funzjoni tpartit. Issa x'hemm ġewwa tal swap? Ukoll, ibbażata fuq programm ġimgħa li għaddiet u l-waħda aħna biss raw silta minn, ġewwa tal-qafas tal tpartit, jew fuq l-swap trej, huma dak varjabbli? Well, au b. Għaliex dawk kienu l-argumenti lokali tiegħu, flimkien ma 'terz, PAT. Allura verament, I jista 'jiġbed dan ftit aktar nadif. Let me imorru quddiem u jneħħu t-tikketta. U let me jsostnu li inti taf liema? a huwa probabbilment se jispiċċaw here. B hija ser jispiċċaw here. U TMP huwa ser jispiċċaw here. Issa, l-ordni jista ' tkun ftit differenti. Iżda kunċettwalment dan huwa l-idea. U biss kollettivament, dan huwa dak aħna ser sejħa frame tpartit ta, jew trej dining sala-. U l-istess jittrattaw prinċipali. Imma jien mhux se tiġbed dik. Iżda li meta argc u ARGV u kull ta 'varjabbli lokali tiegħu bħal xuy jista 'jkun ukoll. Allura issa jqisu x'inhu verament jiġri meta inti sejħa swap. Meta inti sejħa tpartit, eżekuzzjoni kodiċi bħal dan, int tgħaddi fi, fil- verżjoni Buggy, aub bħala kopji ta 'xuy. Mela jekk jien issa tiġbed fuq l-iskrin - ltqajna biex tikseb aħjar fil dan - hekk l-istorja I kien javżak li myself Kien f'dan il-verżjoni Buggy, meta aħna sejħa tpartit tgħaddi fis litteralment u b bħala numri sħaħ, dak li verament jiġri? Ukoll, dak li verament jiġri huwa dan. Let me imorru quddiem u jneħħu biss biex tnaddaf xi spazju here. Allura dan huwa memorja tal-kompjuter tiegħi. Mela jekk jien, per eżempju - attwalment ejja tagħmel dan il-mod - jekk I jsostnu li din hija x-ħażna il-valur 1 bħad aħħar ġimgħa. U dan huwa y, il-ħażna tal-valur 2 bħad aħħar ġimgħa. U dan huwa prinċipali, meta I sejħa tpartit, b'hekk myself aċċess għal u b u TMP, jien ser jsostnu li dan huwa u dan huwa 1. Dan huwa b. Dan huwa 2. Din tissejjaħ TMP. U inizjalment, hija għandha xi valur żibel sal I attwalment jaħżnu ġewwa fih, li huwa 1. Imbagħad I jimxi 'l quddiem u l-bidla a li jkun dak li? Valur B. U hekk issa għandi tnejn hawn. U allura għidna b gets TMP. Għal darb'oħra, biss bħala tiċċekkja sanità, it-tielet linja tal-kodiċi hawn hija sempliċement dan waħda, b gets TMP. U għalhekk fl-aħħarnett, x'għandi nagħmel? I jimxi 'l quddiem u l-bidla b li jkun x'ikun il-valur tal-TMP huwa, li huwa 1. I ma tmissx darb'oħra TMP. Imma issa, il-problema hija hekk kif swap prospetti, għaliex mhuwiex għoti lura xi valur, hemm ebda ritorn dikjarazzjoni b'mod espliċitu fiha. X'qed verament jiġri? Ukoll, essenzjalment dan kollu memorja - OK, apparentement l-Eraser jħobb finger wieħed biss kull darba - kemm xejn jispartixxi. Issa fir-realtà mhuwiex jmorru kullimkien. Iżda int tista 'taħseb issa bħala trade marks in kwistjoni. Għaliex dan huwa m'għadux attwalment użati. U ma jsir xejn ma 'dawk il-valuri. Allura fil-każ tal-verżjoni aħdar ta ' dan il-kodiċi, dak minflok qed għadda fis swap? Allura tindirizza. Allura l-indirizz tal xu l-indirizz ta 'y. Allura jekk aħna mill-ġdid tgħid din l-istorja wieħed aħħar ħin, u I attwalment tiġbed swap mill-ġdid, iżda ma pointers, peress li din hija, dan jkunu b, u dan TMP tkun, dak li huwa attwalment maħżuna f'dan aħdar verżjoni tal-kodiċi tiegħi fejn jien tgħaddi fl indirizzi? Huwa ser tkun pointer li x. So I jista 'jiġbed vleġġa. Imma ejja jużaw l-istess arbitrarja Eżempju bħal qabel. Ejja ngħidu li dan huwa xi ħaġa bħal Ox123. U dan se tkun Ox127 minħabba huwa l-erba 'bytes bogħod għax huwa ta' int, hekk Ox127. U għal darb'oħra, jien tieħu xi libertajiet man-numri. Huma qed ħafna iżgħar milli kieku fil-fatt tkun u f'ordni differenti. Imma li kif l-istampa issa hija differenti. Imma meta I jużaw dan il-kodiċi aħdar u jien TMP int jiksbu * a. * Mezz biex tagħmel li ġej, jieħdu l- jindirizzaw li fil au mur għaliha, li huwa 1. U dan huwa dak I mbagħad titqiegħed fl TMP. Sadanittant, fil-linja li jmiss tal-kodiċi hawn, * a gets b, xi jfisser? Well, * a, hekk mur hawn gets * b, li jfisser jmorru hemm. U dan ifisser tpoġġi l-valur li hemm. Fl-aħħarnett, l-aħħar linja tal-kodiċi sempliċement qalet * b gets TMP. Allura b jgħid jmorru hemm u jissostitwixxu ma ' TMP li, f'dan il-każ, huwa għaddej li tkun, għal darb'oħra, 1. U dan huwa għaliex l-verżjoni aħdar ta ' xogħlijiet kodiċi tagħna, billi l-aħmar verżjoni qatt ma għamlu. Huwa kollha biss jeħodna dwar kif il- memorja huwa ġestit u fejn huwa fil-fatt imqiegħed tiegħek RAM kompjuter. U għal issa, li waħda mill-affarijiet li l-munzell ikun qed jintuża għall. Mistoqsijiet dwar il-format? Fuq pointers? Jew fuq tpartit? Kull dritt, hekk malloc, recall, għamilt xi ħaġa bħal din. Dan kien eżempju sempliċi super. U dan kien il-wieħed li Binky introdotti magħna biex, għalkemm pjuttost malajr, fl-aħħar tal-klassi. Dammit, hemm aħna go darb'oħra. Allura wieħed jiftakar li din kienet l-eżempju li Binky introdotti magħna biex, għalkemm kemmxejn malajr fl-aħħar tal-klassi. U hawn aħna użati malloc verament għat-tieni darba. Minħabba li l-ewwel darba aħna użati biex joħolqu RAM biżżejjed, jallokaw biżżejjed RAM taħżen string. Din id-darba Binky jinżammu sempliċi. Allura huwa li taħżen biss l int, apparentement. U li totalment multa. Huwa ftit stramb, franchement, li użu malloc talloka int wieħed. Imma l-punt ta 'claymation Nick kienet verament ftit tgħid l-istorja ta 'dak li jiġri jew ma jiġri meta inti maltrattati memorja. Allura f'dan il-każ, dan il-programm ma ftit affarijiet. Fl-ewwel każ hawnhekk, tiddikjara a pointer msejħa x għal int. Imbagħad tiddikjara pointer imsejħa y għal int. Imbagħad imħażen x, liema? Xi ħadd ieħor issa. Liema gets maħżuna x skond it-tielet linja ta 'dan il-programm? UDJENZA: [inaudible]. SPEAKER 1: Well, pjuttost mhux bytes, kull say. Ikunu aktar preċiżi issa. Liema gets maħżuna x? An indirizz, I think I smajt dan. Allura dak li ma malloc lura? malloc behaviorally jalloka blokki ta 'memorja. Imma kif ma jagħtik aċċess għal dan? Dan jirritorna liema? L-indirizz ta 'l-ewwel byte fil-blokki ta 'memorja. Issa, dan huwa sempliċi super. Huwa wieħed biss byte, li tfisser il- tindirizza aħna jkollna lura hija l- indirizz tal-ħaġa sħiħa. Allura maħżuna x allura, huwa l-indirizz ta 'dik blokki ta' memorja. Sadanittant, dak li jiġri li jmiss? Allura fil-fatt, ejja imorru quddiem u tiġbed fast out reali. Allura jekk aħna jmorru fuq l-iskrin hawn u we play dan out int * x u int * y huwa se jagħmel dak għalija? I jsostnu li huwa biss se jagħmlu xi ħaġa bħal din u sejħa hija x, u dan u sejħa hija y. Sadanittant, it-tielet linja ta 'kodiċi ser jalloka l-daqs ta 'int, li jiġri li jkun - sorry jekk I qal wieħed qabel I fisser int wieħed - erba bytes fuq kompjuter tipiku. Mill-inqas ma 'l-appliance CS50. Allura dan se talloka dan, li jaf? X'imkien hawn. U dan huwa maħżun f'xi indirizz OX, li jaf? Imma dak li għaddej biex tikseb lura huwa dak l-indirizz. Iżda aħna ser tiġbed pictorially biss bħala vleġġa bħal dik. Issa fil-linja li jmiss * x gets 42. X'tagħmel * x jfissirx f'termini laymans? Just jmorru hemm. Tmur f'dak indirizz. Jew fi kliem ieħor, isegwu l- vleġġa u mqiegħda 42 hemmhekk. Iżda mbagħad xi ħaġa ħażina ġara li Binky, id-dritt? Ifakkar li linja ħamsa hawn, * y gets 13, fil-fatt numru unlucky, ma dak għalina? Ukoll, * mezzi y jmorru hemm. Ukoll, dan ma ngħatatx valur għadhom, id-dritt? Il-kodiċi ma jkollhom y qed initialized għal xejn. Kellna x qed initialized għal indirizz. Iżda y ġiet iddikjarata top up. Iżda mbagħad virgola b'punt, ebda valur kien effettivament tqiegħed fiha. Allura huwa ġust li sejħa dan valur żibel. Min jaf x'hemm hemmhekk? Huwa l-fdalijiet ta bits li kienu użati minn xi linja ta 'qabel tal-kodiċi fil- programm tiegħi. Mela jekk jien ngħid jmorru hemm, dan huwa simili, Għandi l-ebda idea fejn dan vleġġa ser jispiċċaw. U li meta inti tipikament tikseb tort segmentazzjoni. Jekk inti aċċidentalment dereference, biex jitkellmu, jew mur l-indirizz li mhux attwalment indirizz leġittimu, affarijiet ħżiena jiġri. U dan huwa eżattament dak li ġara biex jaħsbu Binky. Allura ifakkar li l-istorja li Nick kien javżak hawn kien l-istess idea bħala dak Stajt tinġibed l-illużjoni ta ' ġibs fuq il-bord hemmhekk. X u Y huma ddikjarati. Imbagħad aħna allokat id-daqs ta ' l int u maħżuna fil x. Imbagħad il-linja li jmiss għamilna * x. Dan kien bastun maġiku Nick ta dereferencing. Li jpoġġu 42 fil-memorja enfasizzat mill x. Iżda din hija fejn l-affarijiet marru horribly ħażin. Dritt? Aħna ppruvaw y dereference. Iżda y kellhom xi valur fittizji, right? Li arrow fil-qiegħ tax-xellug kantuniera, mhuwiex attwalment tipponta lejn xejn. Huwa tip ta 'tagħmel dak I għamlet hawn fuq il-bord. Sabiex l-affarijiet ħżiena jiġri, segmentazzjoni tort, jew Binky tort, f'dan il-każ. Imma jekk aħna mbagħad jiffissaw dan billi tagħmel x gets y Kif jinbidel istorja? Ukoll, jekk I do x gets y, li l- effettivament l-istess kif qal tkun xi tkun din hija, OX-ħaġa se tkun l-istess hawn, Ox-ħaġa. Jew pictorially aħna ser tiġbed vleġġa. Allura hawn fuq il-bord ma 'Binky, mal-linja li jmiss ta ' kodiċi, * y ifisser jmorru hemm. Fejn hemm? Dan ifisser hawn fuq. U meta aħna aġġornament li biex jkun ta '13 hija biss jinvolvi għaddejjin u miktub 13 hawn issa. Allura forsi mhux kompletament sempliċi ewwel daqqa t'għajn. Iżda biex terġa u jużaw l-istess lingwaġġ li Binky kienet qed tuża hawn, hekk l-ewwel tnejn talloka l-pointers, X u Y, iżda mhux il-pointees. U pointees mhix terminu ġeneralment użat. Iżda pointer assolutament hu. Iżda huwa dak li qed osservat fil fin-nomenklatura Binky tal. Din il-linja li jmiss, naturalment, jalloka pointee int. Allura blokki ta 'memorja - kif I ġibdet fuq fuq in-naħa tal-lemin hemm - u sett x ugwali għall-punt lilha. Dan dereferences x biex jaħżnu 42 l-memorja li huwa tipponta lejn. U allura dan, naturalment, kienet ħaġa ħażina. Minħabba y ma kienx tipponta fil xejn s'issa. Dan jiffissa dan. Allura dan għadu programm buggy. Sempliċiment għax aħna qed blowing permezz tal- kodiċi linja b'linja u qal, oh ukoll, ħalliha crash hemmhekk. Li l-ħaġa ħażina. Odds huma l-programm jinsab biss ser abort kollox f'dak linja. Imma jekk ġejt biex tneħħi l-ġġarraf linja u tibdilha ma 'l-aħħar tnejn linji hemm inti tassenja - użu assenjazzjoni pointer - y għall-punt li x bħala punt t. U allura inti dereference y b'mod sikuri ferm. Għalhekk, fejn ma dan il-leave us? Ukoll, jirriżulta li taħt il-barnuża fil-librerija CS50, pointers huma użat kollu. U aħna ser attwalment tibda titqaxxar lura li saff qabel twil. Iżda jirriżulta wisq, espressjoni li xi wħud minnkom jista 'jkun familjari ma', partikolarment dawk aktar komda, huwa attwalment dak ta 'popolari ħafna websajt, jew overflow munzell, dawn il-jiem. Iżda dan attwalment għandha ħafna tifsira tekniku. Aħna issa jkunu jafu x'inhi munzell hu. Huwa bħal munzell ta 'dixxijiet ġewwa ta 'sala dining. Jew ġewwa tal-kompjuter tiegħek memorja tiegħu dawk frames li huma użati mill-funzjonijiet. Ukoll, jirriżulta li minħabba li implimentazzjoni sempliċi ħafna ta ' memorja u l-kwadri fuq l-hekk imsejħa munzell, inti tista 'attwalment jieħdu l-kontroll ta 'sistema tal-kompjuter pjuttost faċilment. Tista Hack fis-sistema jekk in-nies bħalna ma miktub kodiċi tagħna partikolarment tajjeb. Jekk in-nies bħalna jużaw biċċiet tal-memorja jew l-użu arrays - saħansitra aktar komunement - imma xi kultant tinsa li jivverifika l- konfini ta 'firxa tagħna kif inti tista' jkollhom yourself kultant, u tennew mod wisq passat l-aħħar firxa. Fil-każ aħjar, program tiegħek tista 'biss crash. Tort Segmentazzjoni, tip ta 'embarrassing. Mhux kbira, iżda mhux neċessarjament ħaġa immensament ħażina. Imma jekk program tiegħek huwa attwalment fuq reali kompjuters utenti, jekk huwa taħdem fuq websajt li nies bl-addoċċ attwali fuq l-internet qed tolqot, kiri nies jinduċi affarijiet ħżiena fuq kodiċi tiegħek huwa ġeneralment mhux ħaġa tajba għaliex dan ifisser l-opportunità li jieħu kontroll tal-kompjuter. U dan se tfittex ftit cryptic. Imma ħsibt I d biża inti ma dan l-aħħar eżempju hawn. Hawn eżempju ta 'kodiċi. U hemm Wikipedia tajba artikolu li mixjiet permezz dan f'aktar dettal. Għandi prinċipali fuq is-sejħa tal-qiegħ foo, li jgħaddi fil ARGV ta '1. U dan huwa biss sabiex inti tista ' tmexxi l-programm u jgħaddu input arbitrarja. U allura foo huwa ddikjarat up top bħala taċċetta string, jew aktar preċiżament, char *. Imbagħad jiddikjara firxa ta 'Chars. Sejħa hija ta 'buffer, b'mod aktar ġenerali, ta 'daqs 12. Allura 12 Chars jistgħu joqogħdu ġewwa ta 'dak array imsejħa c. U allura juża din il-funzjoni l-ġdida, li huwa ġdid imma mhux diffiċli biex jifhmu, kopja memorja. Hija kopji l-memorja minn bar, li kienet il-varjabbli n passat, ikun x'ikun l- utent ittajpjat fil ARGV 1 fis c. Kemm bytes ħafna? It-tul sensiela ta 'bar. Allura fi kliem ieħor, jekk it-tipi l-utent fil- h-e-l-l-o jidħlu, it-tul string ta bonjour huwa ħamsa. Allura ħamsa minn dawk bytes hija se tikseb ikkopjata fil-firxa imsejħa c, li hija ta 'daqs 12. Imma dak it-tipi l-utent fil-ħafna itwal kelma li l-13-karattri jew 14 karattri jew 100 karattri jew aktar? Fejn huma se jmorru? Ukoll, dak il-qafas, li trej fil-ċmieni dining sala-, dawn qed tmur biex jmorru hemm. U huwa biss ser tibda kitba fuq oħra Jittieħed oħra li l-diġà fuq dik munzell, overflowing l-munzell, biex ngħidu hekk. Allura pictorially, think ta 'dan il-mod. Dan huwa biss verżjoni mlewna ta ' l-istampa konna qed jieħu. Fil-qiegħ, ejja ngħidu, hija prinċipali. U fuq il-quċċata, dak li qed tara issa huwa l-qafas, kulur kkodifikati issa, għal funzjoni msejħa foo. Imma x'hemm interessanti hawn dwar foo hija li hawnhekk huwa frejm tagħha. Allura huwa mfassal bħad I għamlet iżda bil-blu dawl. U issa dan huwa fejn c bracket 0 tmur. U dan huwa fejn bracket c 11 huwa ser jispiċċaw. Fi kliem ieħor, dan jiġri jkun irrappreżentat bħala kwadru. Imma jekk inti biss iżommu plopping bytes isfel - jew jaħraq - dawn qed tmur biex tintemm up fil-post 0-triq kollha sa sa 11, għaliex dan huwa 0 indiċjati. Iżda fejn huwa l-karattru 13 ser jispiċċaw? Fejn hi l-14 ta? Fejn hi l-karattru 50 ser jispiċċaw? Huwa ser jibqgħu għaddejjin isfel. Għaliex anki jekk konna ġibdu l- istampa bil-munzell jikbru, il- indirizzi, jirriżulta, imorru minn indirizzi żgħar, żgħar pointers, għal indirizzi kbar. Allura hija biss iżomm għaddej up u aġġornata. Mela jekk tipi l-utent fil- hello, li l-kbir. Nru bug, l-ebda problema, sikur kulħadd. Iżda jekk it-tipi l-utent fil dak li aħna ser sejħa kodiċi kontradittorju, irrappreżentata ġeneriku bħala, attakk, attakk, attakk, attakk, dak li jista 'jiġri? Ukoll, jekk kollha ta 'l-input li l-utent ttajpjata mhix biss ftit friendly jew sekwenza ta 'karattri offensiv. Huwa fil-fatt sekwenza ta 'karattri li jekk inti miġbura dan, fil-fatt hu kodiċi. Forsi huwa kodiċi li tħassar l- fajls fuq hard drive tiegħek jew jibgħat spam jew xi ħaġa bħal dik. Avviż li x'hemm prinċipali hawnhekk hija li jekk il-Guy ħażina ltqajna xortik tajba biżżejjed biex jissostitwixxu l-blokki aħmar tal-memorja - li jien ma tibbaża fuq stampa tiegħi iżda din l-istampa Wikipedija għandha hawnhekk - hekk imsejħa indirizz ta 'ritorn tagħha. Meta jerġa 'jibda l-ikel, meta tpartit prospetti, kif ma 'l-kompjuter jaf li jmorru minn up hawn biex stabbiliti hawn? Jew fil-segment tech up hawn fuq, kif ma taf li jmorru mit-tpartit kodiċi - il-0 u l-1 li jikkomponu swap - lura għall prinċipali? Hemm hekk imsejħa indirizz ta 'ritorn maħżuna fl-istess qafas munzell, fuq l-istess trej kafetterija. Allura jekk il-Guy ħażina hija għaqlija biżżejjed biex tpoġġi kodiċi attakk, attakk kodiċi, attakk kodiċi, u jiksbu xortik tajba biżżejjed - spiss permezz ta 'prova u żball - li jissostitwixxu dak l-indirizz tar-ritorn aħmar, bl-indirizz u avviż il-quċċata ħafna. Avviż 0835C080. Huwa bil-miktub lura up fuq għall- raġunijiet aħna ser tirrevedi forsi. Dan huwa dak in-numru. Allura jekk il-Guy ħażina gets xortik tajba biżżejjed jew huwa intelliġenti biżżejjed biex jissostitwixxu l-aħmar strixxa ta 'memorja bl-indirizz ta' kodiċi li hu jew hi għandu b'xi mod injettat fis-kompjuter tiegħek, raden li kodiċi se jiġu rritornati lill malli foo isir eżekuzzjoni? Kodiċi l-Guy ħażina tal. Allura dan il-kodiċi attakk, AAA, għal darb'oħra, jista jibgħat l-ispam, tista tħassar il-fajls kollha fuq hard drive tiegħek. Imma dan huwa dak verament overflow munzell huwa, jew eċċess buffer, jew protezzjoni kontra attakk overflow. U huwa oerhört, oerhört komuni din il-ġurnata ma 'programmi miktubin C, C + +, u anki f'xi lingwi oħra. Fuq din in-nota scary, aħna ser jispiċċa bil Joke. [Daħk] Ara inti nhar l-Erbgħa. Fl-CS50 jmiss - Hekk jien kollha barra ta 'lampi disk lum, iżda stenna, ħalib, nofs it-telefon bla xaħam ktieb, il-meraq tal-larinġ li I xorbu illum. USB cable, a wrench. [Daqq tal-mużika]