[Daqq tal-mużika] DAVID J. Malan: Kull dritt. [Daħk] Merħba lura. Dan huwa CS50. U dan l-aħħar ta 'ħames ġimgħa. U sa issa, aħna ħadthom pretty ħafna ilhom jieħdu għal mogħtija li hemm teżisti din kompilatur, clang, li inti ħadthom ġew invokazzjoni permezz ta 'dan għodda oħra msejħa Agħmel li b'xi mod magically tikkonverti source code tiegħek fis kodiċi oġġett, l-żerijiet u dawk li l-kompjuters CPU tiegħek, ċentrali unit ta 'proċessar, fil-fatt jifhem. Iżda jirriżulta hemm numru li l- għaddejjin taħt il-barnuża fl bejn input u output. U nixtieq li tipproponi li aħna laħam li fid ftit aktar dettall fis dawn l-erba passi, ikollhom xi ħaġa imsejħa qabel l-ipproċessar, xi ħaġa imsejħa kompilazzjoni, li rajna, xi ħaġa imsejħa assemblaġġ, u xi ħaġa imsejħa jgħaqqdu. Allura sa issa, f'xi tagħna programmi, aħna kellna sharp jinkludi. Aktar reċentement aħna kellna xi sharp tiddefinixxi għall kostanti. Għalhekk jirriżulta li dawk l-affarijiet li huma prefissi bil-simbolu hash jew is-simbolu lira huma pre-proċessur direttivi. Li jinsab biss mod fancy ta 'tgħid huwa linja ta 'kodiċi li attwalment maqluba xi ħaġa oħra quddiem il- kompjuter saħansitra jippruvaw li jikkonvertu tiegħek Programm tiġi żero u dawk. Per eżempju, qawwi tinkludi l-istandard I / O. H, pretty ħafna biss ifisser jmorru quddiem, grab-kontenut tal-fajls stdio.h u paste minnhom hemm dritt. Sabiex l-ebda żero u dawk f'dak il-punt għadu. Huwa verament ftit sostituzzjoni. U li sar matul l-hekk imsejħa istadju ta 'qabel l-ipproċessar, meta inti tmexxi effettivament clang jew speċifikament Jagħmlu f'ħafna każijiet. Allura dan kollu kien jiġri ewwel awtomatikament s'issa. Imbagħad jiġi l-pass kumpilazzjoni. Iżda aħna kont qed eżaġerat kumpilazzjoni. Kumpilazzjoni programm verament ifisser li teħodha minn xi ħaġa bħal C, il- kodiċi tas-sors konna ġie miktub, down għal xi ħaġa imsejħa assemblaġġ. Lingwa assemblaġġ huwa livell aktar baxx lingwa li, Thankfully, aħna mhux se għandhom ħafna okkażjoni biex tikteb dan is-semestru. Iżda huwa fil-livell l-aktar baxx fil- sens li inti litteralment tibda bil-miktub żid u naqqas u jimmultiplikaw u t-tagħbija mill-memorja u jiffrankaw l-memorja, il- istruzzjonijiet bażika ħafna li l-kompjuter, taħt il-barnuża, jifhem effettivament. Fl-aħħar nett, assemblaġġ jieħu dik il-lingwa għall-żero u dawk li aħna kont qed jiddeskrivi s'issa. U verament fl-aħħarnett, hemm l-hekk imsejħa jgħaqqdu fażi, li aħna ser tara fi ftit mument, li jgħaqqad żerijiet tiegħek u dawk biż-żeri u dawk nies oħra qabel għandek maħluqa. Għalhekk tikkunsidra dan il-programm sempliċi super. Kien minn Ġimgħa 1. Huwa biss qal, Hello World, fuq l-iskrin. Aħna dam dan permezz clang. Jew aħna dam permezz Agħmel li dam clang. U outputted fil-ħin fejn xi żero u dawk. Iżda jirriżulta hemm pass intermedju. Jekk immur hawn fuq - oops, ma trid tara lilu s'issa. Jekk I jmorru fuq hawn biex appliance tiegħi u I jiftħu hello.c, hawnhekk huwa l-istess programm. U dak li jien ser tagħmel terminal tiegħi tieqa hawnhekk huwa jien ser run clang pjuttost milli Kun, li automates l-erba ' dawk il-passi għalina. U jien ser tagħmel clang-S u imbagħad hello.c u mbagħad tidħol. U niġi pront Teptip għal darb'oħra, li hija tajba. U issa fil-tieqa kemmxejn akbar, Jien ser jiftħu gedit fil hawn. U jien ser tiftaħ fajl li, jirriżulta, huwa hello.s sejjaħ din jkollu dak lingwa assemblaġġ I imsemmi qabel. U dan huwa dak li sejjaħ assemblaġġ lingwa, livell pjuttost baxx istruzzjonijiet li CPU Intel tiegħek jew kwalunkwe huwa li l-ġewwa jifhem. U mov huwa għall-pass. sejħa hija għal ssejjaħ, funzjoni livell baxx ħafna. sub huwa għall naqqas. Allura meta jkollok CPU partikolari ġewwa tal-kompjuter tiegħek, dak li jagħmilha CPUs distinti, kontra ieħor fuq il- suq, tkun li l-istruzzjonijiet li jifhem u spiss kif effiċjenti huwa huwa, kif fast huwa fil eżekuzzjoni f'xi ta 'dawk l-istruzzjonijiet. Issa għal aktar fuq dan, inti tista 'tieħu CS61 Fall jmiss fil-kulleġġ. Iżda hawnhekk għandna, per eżempju, ftit identifikaturi li tista 'tidher familjari. hello.c huwa l-isem tal-programm. . Test - hemm Ma tantx ta 'interess hemm biss issa, ifakkar li t-test segment, bħala tat-Tnejn, huwa fejn fl memorja program tiegħek fil-fatt jispiċċa. Allura dak inqas vagament familjari hemmhekk. Hawnhekk, naturalment, huwa referenza tal-funzjoni prinċipali tagħna. Scrolling, dawn jirreferu għall-affarijiet imsejħa reġistri, biċċiet żgħar ħafna tal- ġewwa memorja ta 'CPU tiegħek attwali. U jekk I iscroll anke ulterjuri, nara xi tip aċċenn indirett ta 'ASCII. U hemm, tabilħaqq, hija li string, hello, comma, dinja. Allura storja twila fil-qosor, dan kien jiġri għalik, awtomatikament, taħt il-barnuża kollha ta 'dan iż-żmien. U dak li kien jiġri huwa verament darba inti stajt run clang, jew permezz ta ' Tagħmel, int jkollna l-ewwel, mill-kodiċi sors, il- hekk imsejħa lingwa assemblaġġ. Imbagħad clang qiegħda taqleb din l-assemblea lingwa isfel sa żero u dawk. U dan huwa l-slide li bdejna diskussjoni tagħna fil-Ġimgħa 0 fuq - u mbagħad Ġimgħa 1 fuq. U mbagħad finalment, dawk żero u dawk huma kkombinati ma 'l-żero u dawk minn dawk libreriji aħna kont qed tieħu għall mogħtija bħal Standard I / O jew il- Librerija String jew saħansitra il-librerija CS50. Allura biex żebgħa din l-istampa aktar viżwalment, għandna hello.c. U, naturalment, tuża l-printf jiffunzjonaw jiġifieri, bonjour dinja. Il-pass kumpilazzjoni tieħu l-isfel għal dan il-fajl aħna biss raw hello.s, anke għalkemm thats tipikament mħassra awtomatikament għalik. Iżda li l-kodiċi assemblaġġ fil-pass tan-nofs. U allura meta aħna jiġbor l-assemblaġġ lingwa, biex ngħidu hekk, li meta inti tikseb dawk żero u dawk. Allura aħna ħadthom żżomjati effettiv llum fuq dak li aħna kont qed tieħu għall mogħtija, ifisser li jmorru kodiċi tas-sors li toġġezzjona kodiċi. Iżda fl-aħħar, issa dak l-istess stampa - ejja shove dan matul naħa tax-xellug. U jinnota li fil-quċċata hemm Semmejt stdio.h. Li l-fajl li konna inklużi fi kważi kollha tal- programmi konna bil-miktub. U li l-fajl li l-kontenut nikseb kopja pasted, effettivament atop kodiċi tiegħek. Iżda jirriżulta li, fuq il-kompjuter sistema x'imkien, hemm preżumibbilment fajl stdio.c li xi ħadd kiteb snin ilu li timplimenta kollha ta 'l- funzjonijiet li kienu ddikjarati fl stdio.h. Issa fir-realtà huwa probabbilment mhux fuq Mac tiegħek jew PC tiegħek jew anke fil- CS50 appliance huwa kodiċi C prima. Xi ħadd diġà miġbura dan u inkluda . Fajl għall-kodiċi oġġett jew o. A fajl, li tirreferi għal librerija maqsuma li kien installat minn qabel u pre-ikkumpilata għalik. Iżda jissoponi li hemm tabilħaqq jeżisti fuq stdio.c kompjuter tagħna b'mod parallel ma clang. Kodiċi tiegħek l-jiġu kkompilati u mmuntati. kodiċi tal stdio.c qed tkun miġbura u immuntati, b'tali mod li dan l-aħħar ħafna pass, stabbiliti hawn, irridu b'xi mod link, biex ngħidu hekk, żerijiet tiegħek u dawk b'żero tiegħu jew tagħha u dawk f'waħda programm sempliċi li, finalment, huwa imsejħa biss Hello. Allura li kollox tal-magic li l- kien jiġri s'issa. U se tkompli tieħu dawn proċessi għall mogħtija, imma tirrealizza hemm ħafna ta 'dettalji mmerraq għaddejjin taħt hemmhekk. U dan huwa dak li jagħmel tiegħek kompjuter ma 'Intel ġewwa partikolarment distinti. Allura fuq din in-nota, jekk inti tixtieq li jingħaqdu magħna għall-ikel nhar il-Ġimgħa, do go għall-cs50.net/rsvp post tas-soltu, 13:15 nhar il-Ġimgħa. U issa ftit avviżi ftit. Allura aħna għandna xi aħbar tajba. U aħna għandna xi aħbar ħażina. Tibda bl xi aħbar tajba hawn. [Miżgħuda] Kull dritt. Ukoll, huwa teknikament festa, hekk mhuwiex tant rigal minna. Imma mbagħad l-aħbar ħażina tal-kors. [Miżgħuda] I qattgħu ħafna ħin fuq dawn animazzjonijiet. [Daħk] Se jkun hemm sessjoni ta 'reviżjoni din ġejjin Tnejn. Huwa ser tkun fil PM 05:30. Aħna se infakkarkom ta 'dawn id-dettalji kollha permezz ta 'email fuq li l-kors website biss fi ftit ta 'żmien jiem. Din se tkun iffilmjati u magħmula disponibbli ftit wara. Hekk jekk inti ma tistax tagħmel dan it-tnejn slot lejl, tinkwetax. Taqsimiet din il-ġimgħa li ġejjin se wkoll tiffoka fuq ir-reviżjoni għall-kwizz. Jekk taqsima tiegħek huwa nhar it-Tnejn, li huwa tabilħaqq vaganzi università, aħna se jibqa 'jissodisfa fit-taqsima. Jekk inti sempliċiment ma tistax tagħmel dan taqsima għaliex inti qed tmur bogħod, li l-multa. Jattendu Ħadd jew is-sezzjoni it-Tlieta jew tixgħel-in għat-taqsima Jason, li huwa disponibbli online. Allura, aktar aħbarijiet ħżiena. Allura skond il-sillabu, għandna lecture tnejn li jmiss. Iżda l-aħbar tajba - b'mod ċar, I jintefqu wisq ħin fuq dan. [Daħk] Aħna ser tikkanċella jmiss nhar il-Ġimgħa lectures. Allura li se jkun rigal għalina, sabiex inti tista 'verament ikollhom respite sabiħa bejn din il-ġimgħa u ġimgħatejn għalhekk. Allura l-ebda lectures ġimgħa d-dieħla, biss ċkejkna ftit kwizz, li għalihom inti għandek tkun jkollna dejjem aktar eċċitati. Mela ejja issa tagħti attenzjoni tagħna biex xi ħaġa li huwa tabilħaqq aktar viżwali u aktar eċċitanti u li tiffissa l-istadju għal dak li għaddej biex tkun fuq l-orizzont biss fi ftit ġimgħat ħin. Wara l-ewwel kwizz, aħna ser inbiddlu l- tiffoka ta 'settijiet problema tagħna għall-ieħor problema speċifika dominju, dak ta ' forensiċi jew sigurtà b'mod aktar ġenerali. Fil-fatt, it-tradizzjoni ma 'din il-problema sett huwa għalija waħda mill- tagħlim sħabi jew CAs li jimxu madwar kampus tieħu xi ritratti ta ' nies ovvji identifikabbli iżda mhux, postijiet, jew affarijiet, allura kull sena I b'xi jirnexxilhom aċċidentalment iħassru jew korrotti-karta tal-midja diġitali li l-ġewwa tal-kamera tagħna. Imma l-ebda big deal. I tista 'tmur quddiem u plagg li fis-kompjuter tiegħi. I tista 'tagħmel immaġini forensika ta' dan, sabiex biex jitkellmu, billi jikkopja l-żerijiet u dawk off ta 'dik il-karta tal-memorja, kemm jekk karta SD tagħha jew flash card kompatti jew tkun xi tkun int familjari magħhom. U allura nistgħu idejn li out. U għalhekk l-isfida li għandna quddiemna, fost oħrajn affarijiet għalik, se jkun li tikteb Kodiċi C li jirkupra mazz sħiħ ta ' JPEGs għalija u żvela se jkun dawk in-nies, postijiet, jew affarijiet. U aħna ser nitkellmu wkoll, din il-problema iffissati u fil-jiem li ġejjin, dwar grafika aktar ġenerali. Imxejna użati minnhom, kors, għal break out. Imma inti ħadthom tip ta 'tittieħed bħala fatta teżisti dawn il-kunċetti ta 'livell għoli ta rettangoli u ovali. Iżda taħt il-barnuża hemm pixels. U inti kellhom jibdew jaħsbu dwar dawk. Jew inti se għal p-set 4 taħseb dwar id-differenza bejn briks tiegħek, kif malajr int ballun miexja madwar l-iskrin għal break out. Għalhekk hemm dan il-kunċett tal- tikek fuq l-iskrin tiegħek li l- jidħlu fis-seħħ diġà. Issa dak li tara, għalkemm, huwa dak ikollok fuq skrin tal-kompjuter. Jekk inti stajt qatt jarah xi tajba jew TV ħażin, odds huma dawn pretty ħafna jikkura l-udjenza simili technophobes li ma verament jafu ħafna dwar kompjuters. U għalhekk huwa faċli ħafna għall-pulizija ditektif jiġifieri, tista 'inti tindif li sa għalija? Jew itejbu, id-dritt? Tittejjeb huwa bħall-kelma buzz fl aktar kwalunkwe juru relatata magħha. U r-realtà hija jekk inti tieħu ħafna stampa blurry ta 'suspett li jagħmlu xi ħaġa ħażina, inti ma tistax biss ittejjeb dan. Inti ma tistax zoom infinitament. Inti ma tistax tara fl-glint ta 'xi ħadd għajn li jkun ikkommetta dan kriminalità partikolarment, minkejja l- prevalenza ta 'dan fuq it-TV. U hekk ma 'dak ejja jimmotivaw li problema li jmiss stabbiliti ma idea fil xi turi li magħhom inti jista 'jkun familjari. [Daqq video] -OK. Issa, ejja tikseb ħarsa tajba lejn inti. -Żomm dan. Mexxi l lura. -Stenna minuta. Mur dritt. -Hemm. Jiffriżaw dik. Iskrin Full. -OK. Jiffriżaw dik. Jagħmel iktar iebsa fuq dik, se ya? -Vector fil dwar li Guy mir-rota lura. Zoom fl-dritt hawn fuq dan il-post. -Bil-apparat dritt, il-imaged jistgħu jiġu mkabbra u inċiżiv. -X'hemm li? -Huwa ta 'titjib programm. Tista 'ċara li kwalunkwe up? -I do not know. Ejja ittejjeb dan. Tittejjeb-taqsima A-6. -I msaħħa l-dettall u - -I think hemm biżżejjed biex itejbu. Jgħadduha lill-iskrin tiegħi. Tittejjeb il-riflessjoni fl-għajnejn tagħha. -Ejja run dan permezz titjib video. -Edgar, inti tista ttejjeb dan? -Tistrieħ fuq. -I've ilhom jaħdmu fuq din ir-riflessjoni. Xi ħadd-riflessjoni tal. -Riflessjoni. -Hemm riflessjoni ta 'wiċċ tar-raġel. -Il-riflessjoni. -Hemm riflessjoni. -Zoom fl fuq il-mera. Tista 'tara riflessjoni. Tista 'jsaħħu d-dehra minn hawn? Tista 'ttejjeb lilu dritt hawn? Tista 'ittejjeb dan? Tista 'ittejjeb dan? -Nistgħu itejbu dan? Tista 'ittejjeb dan? Żomm 'fuq it-tieni, jien ser itejbu. -Zoom fl fuq il-bieb. -X10. -Zoom. [Daħk] Nimxu-pulzieri -Stenna, stop. -Stop. -Nieqaf. -Jduru madwar 75 gradi il vertikali jekk jogħġbok. [Daħk] -Stop, u lura lill-parti dwar il-bieb għal darb'oħra. Ghandek-enhancer immaġni li jistgħu Bitmap? Forsi-nistgħu nużaw il-Sen Pradeep metodu biex tara fil-twieqi. -Dan is-software huwa state of the art. -Il-valur ikona huwa off. -Bil-kombinazzjoni ta 'algoritmi. -Hu meħuda algoritmi illuminazzjoni li il-livell li jmiss u I jistgħu jużawhom biex jsaħħu din ritratt. -Lock fuq u tkabbar l-assi z. Tittejjeb-. Tittejjeb-. Tittejjeb-. -Jiffriżaw u jtejbu. [Daqq video END] DAVID J. Malan: So Set Problem 5 huwa dak li jinsab quddiem hemmhekk. Allura aħna ser dalwaqt nikseb għarfien aħjar ta 'meta u għaliex inti tista' u tagħna ma jistgħu jtejbu il-mod. Iżda l-ewwel, ejja terġa 'lura l-attenzjoni tagħna xi wħud mill-blokki tal-bini Aħna ser jeħtieġu li jkunu kapaċi li tgħid li l-istorja. Allura ifakkar li fassalna din l-istampa fuq It-tnejn u xi ftit aħħar ġimgħa. U dan jiddeskrivi l-format ta 'affarijiet fil-memorja tal-kompjuter tiegħek meta taħdem xi program. Il-segment teknoloġija top up, recall, jirreferi għall-żerijiet attwali u dawk li jikkomponu programm tiegħek. Hemm, taħt dak, xi initialized jew data uninitialized, li tipikament jirreferi għal affarijiet simili kostanti jew kordi jew varjabbli globali li jkollhom ġew iddikjarati bil-quddiem. Hemm il-borġ, imma aħna ser jaslu lura għal dak fil-bit. U allura hemm il-munzell. Ħafna bħal munzell ta 'dixxijiet fil- kafetterija, dan huwa fejn memorja gets ub'saffi u ub'saffi kull meta inti tagħmel dak fi programm? X'inhu l-użu munzell għall? Yeah? Sejħa tal-funzjoni. Kwalunkwe ħin li inti sejħa funzjoni, huwa mogħtija lill sliver ta 'memorja għall tagħha varjazzjonijiet lokali jew parametri tagħha. U pictorially, naraw li ma 'kull funzjoni suċċessivi imsejħa, meta A sejħiet B C sejħiet sejħiet D, huma nikseb ub'saffi fuq il-munzell. U fi ħdan kull wieħed minn dawk flieli ta ' memorja huwa essenzjalment ambitu uniku għal dik il-funzjoni, li, naturalment, huwa problematiku jekk inti tixtieq li idejn minn funzjoni għall-oħra Biċċa ta 'data li inti tixtieq li li jindiblu jew bidla. Allura dak li kien soluzzjoni tagħna biex jippermetti Funzjoni rappreżentat minn munzell wieħed jinkwadra li jibdlu l-memorja ġewwa ta 'ieħor frame munzell? Kif tagħmel dawn iż-żewġ jitkellmu ma 'xulxin? Hekk billi terġa 'pointers jew indirizzi, li, għal darb'oħra, biss jiddeskrivu fejn fil memorja, permezz ta 'proċedura speċifika numru gidma, il-partikolari valur jista 'jinstab. Allura recall aħħar darba wisq komplejna l-istorja u kkunsidrat pjuttost program Buggy. U dan il-programm huwa Buggy għal ftit raġunijiet, iżda l-aktar waħda tħassib huwa minħabba li ma jiċċekkjaw liema? Yeah, jonqos biex jiċċekkja l-input. Jiddispjacini? Jekk huwa aktar minn 12-il karattru. Allura ħafna smartly, meta jċemplu memcopy, li, kif tissuġġerixxi l-isem, biss kopji memorja mit-tieni argument tagħha fis ewwel argument tagħha. It-tielet argument, ħafna smartly, huwa kkontrollati sabiex jiġi żgurat li inti ma aktar minn kopja, f'dan il-każ, it-tul ta 'bar, numru ta' karattri, fil-destinazzjoni, li hija din array C. Iżda l-problema hija li dak jekk C innifsu mhuwiex kbir biżżejjed biex jimmaniġġaw dan? Int ser kopja l-għadd ta ' bytes li inti stajt ġew mogħtija. Imma dak li inti fil-fatt ikollhom aktar bytes milli għandek spazju għall? Ukoll, dan il-programm ħafna foolishly biss addoċċ tipproċedi biex jieħdu kwalunkwe huwa partikolari, bonjour backslash 0 huwa kbir jekk string huwa qasir biżżejjed, bħal ħames Chars. Imma jekk huwa attwalment 12-il karattru jew 1,200 karattri, rajna aħħar darba li int biss ser kompletament jissostitwixxu memorja li ma jappartjenix lilek. U l-agħar każ, jekk inti jissostitwixxu dik porzjon aħmar hemmhekk li aħna imsejjaħ il- ritorn indirizz - dan huwa biss fejn il-kompjuter awtomatikament, għalik, wara l- xeni, tucks bogħod valur 32-bit li ifakkar li dak indirizz suppost ritorn meta foo, din il-funzjoni l-oħra, isir esekuzzjoni. Huwa Frak ħobż ta 'tipi li dan jirritorna. Jekk inti jissostitwixxu li, potenzjalment, jekk int l-Guy ħażina, jista tista potenzjalment tieħu f'idejha kompjuter ta 'xi ħadd. U inti ser aktar żgur tiġrifa huwa f'ħafna każijiet. Issa din il-problema ġiet aggravata biss kif bdejna nitkellmu memorja ġestjoni aktar ġenerali. U malloc, għall-allokazzjoni tal-memorja, huwa funzjoni li nistgħu nużaw biex jallokaw memorja meta ma nafux bil-quddiem li nistgħu bżonn xi. Għalhekk, per eżempju, jekk immur lura l-appliance hawn. U I jiftħu mill-aħħar hello2.c żmien, ifakkar dan il-programm hawn, li ħares ftit xi ħaġa bħal din, biss tliet linji - jiddikjara ismek, allura isem string, fuq ix-xellug ugwali getstring. U allura aħna ipprintjaha, isem l-utent. Allura dan kien programm sempliċi super. Biex ikunu ċari, let me imorru quddiem u jagħmlu bonjour-2. Jien ser tagħmel dot mmejla bonjour-2. Iddikjara l-isem tiegħek - David. Ikteb. Hello David. Jidher li jaħdem OK. Imma x'inhu verament għaddej taħt barnuża hawn? Ewwel ejja qaxxar wħud mis-saffi. String huwa biss sinonimu konna realizzati għal liema? Star Char. Mela ejja jagħmilha ftit aktar arcane iżda aktar teknikament korrett li din hija stilla char, li jfisser li isem, iva, hija varjabbli. Imma dak ħwienet isem huwa l-indirizz ta ' a char, li jħoss ftit stramba għaliex jien jkollna lura string. Jien jkollna lura multipli Chars mhux char. Iżda naturalment, għandek bżonn biss l-ewwel indirizz char biex tiftakar fejn l- sekwenza sħiħa hija għaliex għaliex? Kif inti figura fejn l-aħħar ta ' l-sekwenza huwa li jkunu jafu l-bidu? Il żero backslash. Allura ma dawk iż-żewġ ħjiel inti figura qabel il-bidu u t-tmiem ta ' kwalunkwe string huma, sakemm dawn qed iffurmat tajjeb ma 'dik null terminatur, li backslash żero. Iżda dan qed titlob getstring. U jirriżulta li getstring dan il-ħin kien tip ta ' qerq għalina. Huwa qed tagħmel dan ix-xogħol, biex tkun ċert, jkollna string mill-utent. Iżda fejn jgħid li memorja kienu ġejjin minn? Jekk immorru lura għall-istampa hawn u japplikaw id-definizzjoni minn ftit mument ilu, li l-munzell huwa fejn memorja tmur meta l-funzjonijiet huma msejħa, billi li l-loġika, meta inti sejħa getstring, u mbagħad I tip D-A-V-I-D Ikteb, meta hija D-A-V-I-D backslash żero maħżuna, ibbażati fuq il- istorja konna qalulna s'issa? Jidher li jkun il-munzell, id-dritt? Meta inti sejħa tikseb string ikollok ftit porzjon tal-memorja fuq il-munzell. Għalhekk stands għal raġuni li D-A-V-I-D backslash żero hija maħżuna hemm fil-ċmieni. Imma stenna minuta, getstring prospetti li string, biex ngħidu hekk, li jfisser huwa trej mill-kafetterija tittieħed off-munzell. U aħna qal aħħar darba li malli prospetti funzjoni, u inti tieħu li trej, biex ngħidu hekk, off-munzell, liema inti tista 'tassumi dwar il-fdalijiet ta' li l-memorja? I sort tal redrew minnhom bħala trade marks in kwistjoni għaliex effettivament issir Valuri mhux magħruf. Huma jistgħu jerġgħu jintużaw meta xi funzjoni li jmiss huwa msejjaħ. Fi kliem ieħor, jekk aħna jiġri li tkun ħażna - I ser tfassal stampa ta 'malajr hawn tal-munzell. Jekk aħna jiġri li tinġibed l-qiegħ ta 'segment memorja tiegħi, u aħna ser ngħidu li dan huwa l-post tal-memorja okkupati minn prinċipali u forsi arg c u arg vs u kull ħaġa oħra fil-programm, meta getstring tissejjaħ, preżumibbilment getstring gets blokki ta 'memorja hawn. U mbagħad D-A-V-I-D b'xi jispiċċa fil din il-funzjoni. U jien ser oversimplify. Imma ejja nassumu li tagħha D-A-V-I-D backslash żero. Allura dan ħafna bytes huma użati fil- l-qafas għall-getstring. Iżda hekk kif prospetti getstring, aħna qal aħħar darba li dan il-memorja fuq hawn kollha isir - Woops! - kollha isir mħassra b'mod effettiv. U aħna tista 'taħseb dan issa bħala kwistjoni marks minħabba li jaf x'inhu għaddej li ssir ta 'dak memorja. Tabilħaqq, I ħafna drabi jsejħu funzjonijiet għajr getstring. U malli I call xi oħra funzjoni minn getstring, forsi mhux dan il-programm partikolari aħna biss ħares lejn iżda xi oħrajn, żgur xi oħra funzjoni tista 'tispiċċa li tingħata dan il-post li jmiss fil-ċmieni. Allura ma jistax ikun li l-ħwienet getstring D-A-V-I-D fuq il-munzell minħabba I kieku immedjatament jitilfu l-aċċess għaliha. Imma nafu li getstring biss prospetti liema? Mhuwiex jirritornaw lejn me sitt karattri. X'inhu verament jirritorna ma aħna nikkonkludu aħħar darba? L-indirizz ta 'l-ewwel. Allura b'xi, meta inti imsejħa getstring, huwa allokazzjoni ta 'blokki ta' memorja għall- l-sekwenza li t-tip u l-utenti indirizz allura jirritornaw minnu. U jirriżulta li meta inti tixtieq li jiffunzjonaw talloka memorja f'dan mod u r-ritorn lill-persuna li tissejjaħ dik il-funzjoni, l-indirizz ta ' li blokki ta 'memorja, inti assolutament ma tista 'tqiegħed fil-ċmieni fil- qiegħ, għaliex funzjonalment huwa biss ser jsirux tiegħek ħafna malajr, sabiex inti tista 'probabbilment raden fejn aħna qed probabbilment se toss minflok, il-borġ hekk imsejħa. Allura bejn il-qiegħ ta 'l-memorja tiegħek tqassim u l-quċċata ta 'l-memorja tiegħek tqassim huma mazz sħiħ ta 'segmenti. Wieħed huwa l-munzell, u d-dritt hawn fuq huwa l-borġ. U borġ huwa biss blokki differenti ta ' memorja li mhuwiex użat għall-funzjonijiet meta jkunu qed jissejjaħ. Huwa użat għall-memorja fit-tul, meta inti tixtieq funzjoni waħda li grab xi memorja u tkun tista 'tistrieħ fuq dan mingħajr ma jitilfu l-kontroll fuqha. Issa inti tista 'forsi immedjatament tara li dan mhux neċessarjament disinn perfetta. Kif program tiegħek memorja allokat fuq l-munzell, jew kif inti sejħa aktar u funzjonijiet aktar, jew kif inti jallokaw memorja fuq il-borġ ma malloc off bħala getstring qed tagħmel, dak li b'mod ċar jidher li jkun problema inevitabbli? Dritt. Bħall-fatt li dawn vleġeġ huma tipponta lejn xulxin ma bode ukoll. U fil-fatt, nistgħu malajr ħafna crash programm fi kwalunkwe numru ta 'modi. Fil-fatt, I think we jista 'jkollhom għamlu dan aċċidentalment darba. Jew jekk le, ejja tagħmel dan deliberatament issa. Let me imorru quddiem u jiktbu super malajr programm imsejjaħ dontdothis.c. U issa I ser imorru fil hawn u do sharp jinkludu stdio.h. Ejja tiddikjara funzjoni foo jieħu ebda argumenti, li hija denotat kif ukoll mill nulli. U l-unika ħaġa foo se tagħmel huwa sejħa foo, li probabbilment mhuwiex il- idea smartest, iżda dan ikun hekk. Ent null prinċipali. Issa l-unika ħaġa prinċipali huwa għaddej tagħmel huwa sejħa foo ukoll. U biss għall kicks, jien se jmorru quddiem hawn u jgħidu printf "Hello minn foo. " OK. Mela jekk jien ma tagħmel xi żbalji, Kun dontdothis dot mmejla. U ejja tagħmel dan fil-tieqa akbar - dot mmejla, dontdothis. Come fuq. Uh oh. Apparentement, inti tista 'tagħmel dan. Kkritikat dan. OK. Stenna. Stand mill. Did we - Aħna ma tuża bl Kun. [Sighs] Naf imma I think we biss li imħassar. Uh, yeah. Kkritikat dan. Issolvi din Rob. What? Huwa sempliċi ħafna. Yeah, aħna mdawrin ottimizzazzjoni off. OK, stand bye. Issa inħoss aħjar. OK. Kull dritt. Mela ejja recompile dan - Tagħmel inti dontdothis. Inti jista 'jkollok li tibdel isem dan dothis.c fi ftit mument. Hemm immorru. Grazzi. OK. Allura l-fatt li I kien istampar xi ħaġa kienet attwalment biss jonqos il-proċess li permezz tiegħu aħna kien laħaq dak il-punt. OK. Phew! Allura dak li huwa attwalment jiġri? Ir-raġuni hemm, biss bħala twarrib, huwa tagħmel xejn f'termini ta 'input u output għandu tendenza li jkun aktar bil-mod għaliex inti għandek tikteb karattri għall- screen, Kien li tiskrollja. Allura storja twila fil-qosor, kellhom I attwalment ġara hekk paċenzja, rridu naraw raw dan ir-riżultat finali wkoll. Issa li sibt ride ta 'l-istampar-ups, naraw dan id-dritt bogħod. Allura għaliex qed jiġri dan. Ukoll, l-ispjegazzjoni sempliċi, naturalment, hija li foo probabbilment m'għandux jiġu ssejjaħ lilha nnifisha. Issa f'termini ġenerali, dan huwa recursion. U ħsibna ftit ġimgħat ilu jirrikorri hija tajba. Recursion huwa b'dan il-mod maġika ta ' tesprimi lilek innifsek super konċiż. U hija biss xogħlijiet. Iżda hemm fattur ewlieni ta 'kollha ta' l-programmi rikursivi konna tkellem dwar u ħares lejn s'issa, li kienet li kellhom dak? A każ ta 'bażi, li kien xi hard coded każ li qal f'xi sitwazzjonijiet ma sejħa foo, li huwa b'mod ċar mhuwiex il-każ hawnhekk. Allura dak li hu verament jiġri f'termini ta 'din l-istampa? Ukoll, meta prinċipali jitlob foo, huwa jieħu biċċa ta 'memorja. Meta foo foo jitlob, jiġrilha porzjon ta 'memorja. Meta foo foo jitlob, jiġrilha porzjon. Jiġrilha porzjon. Jiġrilha porzjon. Minħabba foo hija qatt lura. Aħna qatt tħassir wieħed minn dawk frames mill-munzell. Allura aħna qed blowing permezz tal-borġ, mhux nsemmux li jaf x'iktar, u aħna qed taqbeż il limiti ta 'tagħna hekk imsejħa segment ta 'memorja. ERROR jmorru segmentazzjoni falza. Sabiex is-soluzzjoni hemm b'mod ċar ma tagħmel dan. Iżda l-implikazzjoni akbar huwa li, iva, hemm assolutament xi limitu, anki jekk mhuwiex definit sew, kif bosta funzjonijiet tista 'ċċempel fil- programm, kif ħafna drabi funzjoni tista 'sejħa nnifisha. Allura anke jekk aħna ma jippridkaw recursion kif dan il-ħaġa potenzjalment maġika a Koppja ta 'ġimgħat ilu għall-sigma funzjoni, u meta aħna tikseb l-informazzjoni istrutturi u CS50, tkun taf tara oħra applikazzjonijiet għal dan, mhuwiex neċessarjament l-aħjar ħaġa. Għaliex jekk funzjoni jitlob huwa stess, jitlob huwa stess, anki jekk ikun hemm bażi każ, jekk inti ma hit li każ bażi għal 1,000 sejħiet jew 10,000 sejħiet, billi ħin li inti jista 'jkollok jispiċċaw tal-kamra fuq l-hekk imsejħa munzell tiegħek u hit xi partijiet oħra ta 'memorja. Allura wisq huwa disinn trade-off bejn eleganti u bejn robustezza ta partikulari tiegħek implimentazzjoni. Allura hemm tnaqqis ieħor jew gotcha ieħor għal dak li aħna ħadthom qed tagħmel s'issa. Meta I imsejħa getstring - let me jmorru lura fis bonjour-2. Avviż li jien ssejjaħ getstring, li huwa jirritorna l-indirizz. U aħna jsostnu li llum indirizz hija mill-borġ. U issa I am istampar l- string f'dak l-indirizz. Imma aħna qatt ma stajt imsejjaħ il- oppost ta 'getstring. Imxejna qatt kellu CALLL funzjoni simili ungetstring, fejn inti idejn lura li l-memorja. Iżda franchement aħna probabbilment kellu jkun. Għaliex jekk inżommu titlob lill-kompjuter għall-memorja, permezz ta 'xi ħadd bħal getstring iżda qatt ma jagħtu lura, żgur li wisq huwa marbut li jwassal għal problemi li biha aħna jispiċċaw ta 'memorja. U fil-fatt, nistgħu nħarsu għal dawn problemi bl-għodda l-ġdida li l-użu huwa cryptic ftit għat-tip. Iżda let me imorru quddiem u tixrid it up fuq l-iskrin fi ftit mument. Jien ser jimxi 'l quddiem u run Valgrind ma parametru li l-ewwel kmand argument linja huwa l-isem ta 'dak il-programm bonjour-2. U sfortunatament huwa output huwa atrociously kumplessi għall-ebda raġuni tajba. Allura naraw dak kollu li mess. David huwa jiddikjara l-isem tiegħi. Allura dak il-programm attwalment taħdem. U issa irridu jiksbu dan ir-riżultat. Allura Valgrind huwa simili fl-ispirtu li GDB. Mhuwiex debugger per se. Imma hija kontrollur memorja. Huwa programm li se jimxu tiegħek programm u jgħidlek jekk inti tlabt a kompjuter għall-memorja u qatt mogħtija li lura, u b'hekk li jfisser li inti għandek nixxija memorja. U tnixxijiet memorja tendenza li tkun ħażina. U inti huwa l-utenti ta 'kompjuters għandhom probabbilment jinħass dan, jekk għandek Mac jew PC. Qatt użati kompjuter tiegħek għall- filwaqt u mhux fasslu f'diversi jum, jew inti ħadthom biss ltqajna lott ta ' programmi li jibda, u l-ħaġa kkritikat inaqqas biex jieqaf tħin, jew għall-inqas huwa super annoying għall-użu, minħabba kollox biss ltqajna super bil-mod. Issa li jista 'jkun kull numru ta' raġunijiet. Dan jista 'jkun loop infinita, bug kodiċi ta 'xi ħadd, jew, aktar sempliċi, jista 'jfisser li inti qed tuża aktar memorja, jew jippruvaw, minn tiegħek kompjuter attwalment għandha. U forsi hemm bug f'xi programm li jżommu tistaqsi għall-memorja. Browsers għas-snin kienu notorji għal dan, titlob għall-memorja aktar u aktar iżda qatt għoti lura. Żgur, jekk inti biss għandek finite ammont tal-memorja, inti ma tistax titlob infinitament ħafna drabi għall- xi wħud li l-memorja. U għalhekk dak li tara hawn, anke jekk darb'oħra output Valgrind huwa kumplikat bla bżonn li t'għajn lejn ewwel, dan huwa l-parti interessanti. Borġ - fl-użu fil-ħruġ. Allura hawnhekk kemm memorja kienet fl-użu fil-borġ fil- ħin tal-programm tiegħi ħareġ - apparentement sitt bytes fir blokka waħda. Hekk jien ser mewġa idejn tiegħi lejn dak blokk huwa. Jaħsbu li huwa biss blokki, aktar kelma teknika għall blokki. Iżda sitt bytes - liema huma l-sitt bytes li kienu għadhom fl-użu? Eżattament. D-A-V-I-D backslash żero, ħamsa ittra isem flimkien mal-terminatur null. Allura dan il-programm Valgrind ndunat li jien talab għal sitt bytes, apparentement, billi mod ta getstring, iżda qatt ma tawhom lura. U fil-fatt, dan jista 'ma jkunx hekk ovvja jekk programm tiegħi ma 'tliet linji, iżda huwa 300 linji. Allura nistgħu ngħidu jagħtu kmand ieħor argument linja li Valgrind li jagħmilha aktar verbose. Huwa ftit annoying li wieħed jiftakru. Imma jekk I do - ejja ara. Nixxija - Ma kien nixxija - anke I ma tiftakarx dak li huwa off-idejn. - Leakage-verifika ugwali sħiħa. Yep, nirringrazzjak. - Leakage-verifika ugwali sħiħa. Ikteb. Istess programm qed taħdem. Tip David darb'oħra. Issa nara ftit aktar dettall. Iżda taħt is-sommarju borġ, li hija identika għal erba - ah, dan huwa tip ta 'sbieħ. Issa Valgrind huwa attwalment tfittex ftit diffiċli fil-kodiċi tiegħi. U huwa qal li, apparentement, malloc fil-linja - aħna zoom out. Fil line - ma naraw liema linja huwa. Iżda malloc hija l-ewwel ħati. Hemm blog malloc. Kull dritt? OK, l-ebda. Dritt? I imsejħa getstring. getstring apparentement jitlob malloc. Allura dak linja tal-kodiċi hija apparentement tort talli allokat dan il-memorja? Ejja nassumu li kull min kiteb malloc kien madwar twil biżżejjed li huwa mhux tort tagħhom. Allura huwa probabbilment minjiera. getstring fil cs50.c - b'tali mod li l- fajl x'imkien fuq il-kompjuter - fil-linja 286 jidher li jkun il-ħati. Issa ejja nassumu li cs50 kien madwar għal ammont deċenti ta 'żmien, sabiex aħna wisq huma infallibbli. U dan huwa probabbilment mhux getstring li l-bug tinsab, iżda pjuttost fil- linja bonjour-2.c 18. Mela ejja tagħti ħarsa lejn dak li linja 18 kien. Oh. B'xi din il-linja mhux neċessarjament buggy, per se, iżda huwa r-raġuni wara li l-memorja tnixxija. Allura super sempliċi, dak li kieku intuwittivament jkun is-soluzzjoni hawn? Jekk aħna qed tistaqsi għall-memorja, qatt ma kienu tagħtiha lura, u li jidher li jkun problema għaliex matul iż-żmien tal-kompjuter tiegħi tista jispiċċaw ta 'memorja, jista bil-mod isfel, affarijiet ħżiena jista 'jiġri, ukoll, x'hemm-soluzzjoni intuwittivi sempliċi? Just tagħtiha lura. Kif inti tillibera li l-memorja? Ukoll, Thankfully huwa pjuttost sempliċi li biss jgħidu isem ħielsa. U aħna stajt qatt sar qabel dan. Iżda int tista 'essenzjalment taħseb ħielsa kif l-oppost ta malloc. ħieles huwa l-oppost ta ' allokazzjoni memorja. Allura issa let me recompile dan. Kun bonjour-2. Let me run mill-ġdid. bonjour-2 David. Għalhekk jidher li jaħdem fil- bl-istess mod. Imma jekk immur lura għall Valgrind u jerġa 'jsir l-istess kmand ġodda tiegħi miġbura programm, ittajpjar fl-isem tiegħi bħal qabel - sbieħ. Sommarju borġ - fl-użu fil-ħruġ - żero bytes fi blokki żero. U dan huwa super sbieħ, kollha blokki borġ kienu meħlusa. Ebda tnixxijiet huma possibbli. Allura ġejjin up, mhux ma Problem Set 4, iżda ma Problema Set 5, l-forensika u 'l quddiem, dan ukoll se ssir miżura tal-korrettezza tal tiegħek programm, jekk jew le inti għandek jew ma jkollhomx tnixxijiet memorja. Iżda Thankfully, mhux biss tista 'raġuni permezz tagħhom intuwittivament, li hija, forsi, faċli għall-programmi żgħar iżda diffiċli għal programmi akbar, Valgrind, għal dawk il-programmi akbar, jistgħu jgħinuk tidentifika il-problema partikolari. Iżda hemm problema waħda oħra li jistgħu jinqalgħu. Let me tiftaħ dan il-fajl hawn, li hija, għal darb'oħra, eżempju kemmxejn sempliċi. Imma ejja tiffoka fuq dak dan il-programm ma. Din tissejjaħ memory.c. Aħna ser post dan illum aktar tard fil- zip ta 'source code tal-lum. U tinnota li għandi funzjoni msejħa f li jieħu l-ebda argumenti u prospetti xejn. F'konformità 20, jien apparentement tiddikjara pointer għal int u ssejjaħ dan x. Jien tassenja huwa r-ritorn valur tal malloc. U biss li tkun ċara, kemm bytes am I probabbilment jkollna lura minn malloc f'din is-sitwazzjoni? Probabbilment 40. Fejn tista 'tikseb dan minn? Ukoll, jekk inti recall li int spiss 4 bytes, għall-inqas huwa fl- appliance, 10 darbiet 4 hija ovvjament 40. Allura malloc huwa jirritorna l-indirizz ta ' blokki ta 'memorja u l-ħażna li jindirizzaw finalment x. Allura biex tkun ċara, liema allura qed jiġri? Well, let me jaqilbu lura li stampa tagħna hawn. Let me mhux biss jiġbed l-qiegħ tal tiegħi memorja tal-kompjuter, let me imorru quddiem u jiġbed l-rettangolu kollu li jirrappreżenta kollha RAM tiegħi. Aħna ser ngħidu li l-munzell huwa fuq il-qiegħ. U hemm segment test id-dejta uninitialized. Imma jien biss se astratt dawk affarijiet oħra bogħod bħala dot, dot dot. Jien biss ser jirreferi għal dan bħala l-borġ fil-quċċata. U mbagħad fil-qiegħ ta 'din l-istampa, biex jirrappreżentaw prinċipali, jien ser biex tagħtiha memorja flieli fuq il-munzell. Għal f, jien ser tagħtiha porzjon tal-memorja fuq il-munzell. Issa, I ltqajna biex tikkonsulta tiegħi kodiċi tas-sors mill-ġdid. X'inhuma l-varjazzjonijiet lokali għall ewlieni? Apparentement xejn, sabiex dak il-porzjon huwa effettivament vojta jew lanqas bħala kbar kif stajt irtirat hu. Iżda fil-f, I jkollhom varjabbli lokali, li tissejjaħ x. Hekk jien ser jimxi 'l quddiem u jagħti f blokki ta 'memorja, ssejjaħ dan x. U issa malloc 10 darbiet 4, Allura malloc 40, fejn jgħid li memorja ġejjin minn? Imxejna ma tfasslux stampa bħal dan qabel. Imma ejja nassumu li huwa effettiv ġejjin minn hawn, hekk wieħed, tnejn, tlieta, erba ', ħames. U issa I bżonn 40 ta 'dawn. So I ser biss tagħmel dot, dot, dot li tissuġġerixxi li hemm saħansitra aktar memorja ġejjin lura mill-borġ. Issa x'inhu l-indirizz? Ejja jagħżlu arbitrarja tagħna tindirizza kif dejjem - Ox123, anki jekk huwa probabbilment se li hija xi ħaġa kompletament differenti. Dik hija l-indirizz tal-ewwel byte fl memorja li jien tistaqsi malloc għall. Għalhekk fil-qosor, linja darba 20 tesegwixxi, dak li hu litteralment maħżuna ġewwa ta 'x hawn? Ox123. Ox123. U l-OX huwa uninteresting. Dan ifisser biss Heres numru hexadeċimali. Imma x'hemm importanti hu li dak li stajt maħżen fl x, li huwa varjabbli lokali. Iżda tip tad-data tiegħu, għal darb'oħra, huwa indirizz ta 'int. Well, jien ser taħżen Ox123. Iżda għal darb'oħra, jekk dan huwa ftit wisq komplikati żżejjed, jekk I iscroll lura, nistgħu astratt dan bogħod pjuttost raġonevolment u biss jgħidu li x hija pointer għal dak blokki ta 'memorja. OK. Issa l-kwistjoni fil-idejn huwa dan li ġej - linja 21, jirriżulta, huwa Buggy. Għaliex? Jiddispjacini? Huwa ma jkollu - jgħidu li darba aktar. Ukoll, ma ħielsa. Allura dak tat-tieni imma. Allura hemm waħda oħra biss, speċifikament fil-linja 21. Eżattament. Din il-linja sempliċi ta 'kodiċi hija biss overflow buffer, overrun buffer. A buffer ifisser biss blokki ta 'memorja. Imma dak blokki ta 'memorja huwa ta' daqs 10, 10 interi, li jfisser li jekk irridu indiċi ġewwa fiha billi tuża z-zokkor sintattika ta 'notazzjoni array, il-kwadru parentesi, ikollok aċċess għall- x bracket 0 x 1 x bracket, bracket dot, dot, dot. x bracket 9 hija l-akbar wieħed. Mela jekk nagħmel x bracket 10, fejn Jien attwalment għaddejjin fil-memorja? Ukoll, jekk ikolli 10 int - ejja fil-fatt jiġbed kollha minn dawn hawn. Allura li kienet l-ewwel ħamsa. Hawn il-ħames ints oħra. Allura x bracket 0 huwa hawnhekk. x bracket 1 huwa hawn. x bracket 9 huwa hawnhekk. x bracket 10 huwa hawnhekk, li jfisser I am javżak, fil-linja 21, il-kompjuter li jpoġġi l- Numru fejn? In-numru 0 fejn? Ukoll, huwa 0, iva. Iżda biss l-fatt li 0 tagħha huwa tip ta 'koinċidenza. Dan jista 'jkun in-numru 50, għal kulħadd aħna kura. Iżda aħna qed tipprova tqiegħed lilha fuq x bracket 10, li huwa fejn dan trade mark in kwistjoni huwa mfassal, li mhix ħaġa tajba. Dan il-programm jista 'tajjeb ħafna crash bħala riżultat. Issa, ejja imorru quddiem u ara jekk dan huwa, tabilħaqq, dak li jiġri. Jagħmlu memorja, peress li l-fajl huwa msejjaħ memory.c. Ejja imorru quddiem u run il-memorja programm. Allura aħna ltqajna xxurtjati, fil-fatt, jidher. Sirna xxurtjati. Imma ejja ara jekk irridu issa run Valgrind. Ewwel daqqa t'għajn, programm tiegħi jista jidhru li huma perfettament korretta. Iżda let me run Valgrind mal- - Leakage-verifika ugwali sħiħa fuq il-memorja. U issa meta I run dan - interessanti. Invalid jiktbu ta 'daqs 4 fi linja 21 ta memory.c. Linja 21 ta memory.c huwa li wieħed? Oh, interessanti. Imma stenna. Daqs 4, dak hu li jirreferu għall? I biss ma wieħed jikteb, iżda huwa ta 'daqs 4. Għaliex huwa 4? Huwa għaliex dan huwa int, li huwa, għal darb'oħra, erba bytes. Allura Valgrind sabet bug li I, glancing fil-kodiċi tiegħi, ma. U forsi TF tiegħek kieku jew ma. What Iżda Valgrind għal dak żgur sabet ħadna żball hemm, anke jekk aħna ltqajna xxurtjati, u l-kompjuter iddeċieda, eh, jien mhux ser crash sempliċiment għaliex inti mimsus byte wieħed, waħda jiswew int ta 'memorja li inti ma attwalment stess. Well, x'iktar huwa Buggy hawn. Indirizz - dan huwa indirizz crazy tfittex f'hexadecimal. Dan ifisser biss x'imkien fil-borġ huwa żero bytes wara blokk ta 'daqs 40 huwa allokat. Let me zoom out hawn u ara jekk dan huwa xi ftit aktar utli. Interessanti. 40 bytes huma definittivament mitlufa fir-rekord telf 1 ta '1. Għal darb'oħra, kliem aktar milli huwa utli hawn. Iżda bbażata fuq il-linji indikati, fejn għandi probabbilment tiffoka tiegħi attenzjoni għall bug ieħor? Qisu linja 20 ta memory.c. Hekk jekk immorru lura għal-linja 20, dak l- wieħed li inti identifikat aktar kmieni. U huwa mhux neċessarjament buggy. Imma aħna għandna dan maqluba effetti tiegħu. Allura kif nista korretta mill-inqas wieħed minn dawk l-iżbalji? Liema jista 'nagħmel wara linja 21? I jistgħu jagħmlu mingħajr x, għalhekk hija li jagħtu lura li l-memorja. U kif nista jiffissaw dan bug? I għandek definittivament tmur aktar il-bogħod minn 0. So let me jippruvaw u jerġa 'jsir dan. Jiddispjacini, definittivament jmorru aktar il-bogħod minn 9. Għamla memorja. Let me terġa Valgrind fil-tieqa akbar. U issa tfittex. Nizza. Kollha blokki borġ kienu meħlusa. Ebda tnixxijiet huma possibbli. U sa hawn fuq hawn, hemm l-ebda referenza kwalunkwe aktar tad-dritt invalida. Just biex jiksbu greedy, u ejja ara jekk demostrazzjoni oħra ma jmurx kif maħsub - I ma jiksbu xxurtjati mument ilu. U l-fatt li dan huwa 0 huwa forsi qarrieqa bla bżonn. Ejja biss tagħmel 50, kemmxejn arbitrarja numru, għamla memorja memorja dot mmejla - xorta jiksbu xxurtjati. Xejn s jiġġarrfu. Ejja ngħidu I biss tagħmel xi ħaġa verament foolish, u I do 100. Let me remake memorja, dot mmejla memorja - ltqajna xxurtjati darb'oħra. Kif madwar 1,000? ints lil hinn, bejn wieħed u ieħor, fejn I għandhom ikunu? Għamla memorja - kkritikat dan. [Daħk] OK. Ejja ma mess madwar aktar. Terġa 'ssir memorja. Hemm immorru. Kull dritt. Allura apparentement inti indiċi 100.000 ints lil hinn fejn għandek ilhom memorja, affarijiet ħżiena jiġri. Allura dan huwa ovvjament mhux a hard, regola fast. I kien tip ta 'użu ta' prova u żball biex naslu s'hemm. Iżda dan huwa minħabba, storja twila fil-qosor, memorja tal-kompjuter tiegħek huwa maqsum ukoll fis-dawn l-affarijiet imsejħa segmenti. U xi kultant, il-kompjuter fil-fatt tak ftit aktar memorja milli inti titlob. Iżda għall-effiċjenza, huwa biss aktar faċli biex tikseb aktar memorja, iżda biss jgħidlek li int jkollna porzjon ta 'dan. U jekk ikollok xortik tajba kultant, Għalhekk, inti tista 'tkun tista' tmiss memorja li ma jappartjenix lilek. Inti għandek l-ebda garanzija li dak il-valur inti tpoġġi hemm se jibqgħu hemm, għaliex il-kompjuter xorta jaħseb mhuwiex tiegħek, iżda mhux neċessarjament għaddej li tolqot taqsima oħra ta 'memorja fil- kompjuter u jinduċi żball bħal dan wieħed hawn. Kull dritt. Kwalunkwe mistoqsijiet imbagħad fuq memorja? Kull dritt. Ejja tagħti ħarsa hawn, imbagħad, fil- xi ħaġa li aħna kont qed tieħu għal mogħti għal żmien pjuttost twil, li Huwa f'dan inkartament imsejjaħ cs50.h. Allura dan huwa fajl. Dawn huma biss mazz sħiħ ta 'kummenti up top. U inti jista 'jkollok ħares lejn dan jekk inti poked madwar fuq l-appliance. Iżda jirriżulta li l-ħin kollu, meta aħna użati biex jużaw string bħala sinonimu, il-mezzi li bihom aħna ddikjarat li sinonimu kien ma 'dan keyword typedef, għal definizzjoni tip. U aħna qed essenzjalment tgħid, tagħmel string sinonimu għal star char. Li l-mezzi li bihom il-munzell maħluqa dawn ir-roti ta 'taħriġ magħrufa bħala l-sekwenza. Issa hawn biss prototip għall getchar. Aħna tista raw qabel, iżda li tabilħaqq dak li tagħmel. getchar jieħu ebda argumenti, jirritorna char. getdouble jieħu ebda argumenti, jirritorna doppja. getfloat jieħu ebda argumenti, prospetti a float, u oħrajn. getint huwa fil hawn. getlonglong huwa fil hawn. U getstring huwa fil hawn. U li hu. Din il-linja vjola huwa Preprocessor ieħor Direttiva minħabba hashtag fil-bidu ta 'dan. Kull dritt. Allura issa let me jmorru fil cs50.c. U aħna mhux se jitkellmu twil wisq dwar dan. Iżda biex jagħtuk idea ta 'x'hemm ilu għaddej dan kollu ħin, let me go għal - ejja do getchar. Allura getchar huwa l-aktar kummenti. Iżda jidher qisu dan. Allura dan huwa l-funzjoni effettiva getchar li aħna kont qed tieħu għall mogħtija jeżisti. U anke jekk aħna ma jużaw dan wieħed li spiss, jekk qatt, huwa inqas relattivament sempliċi. Allura huwa min jieħu ħarsa lejn hawn. Allura getchar għandha loop infinita, deliberatament hekk apparentement. Imbagħad jitlob - u dan huwa tip ta ' użu mill-ġdid sbieħ ta 'kodiċi aħna lilna nfusna kiteb. Huwa jappella getstring. Minħabba dak ma jfissirx li tikseb char? Ukoll, inti tista 'ukoll tipprova tikseb linja kollha ta 'test mill-utent u imbagħad biss ħarsa lejn wieħed ta 'dawk il-karattri. F'konformità 60, hawn ftit daqsxejn ta 'verifika sanità. Jekk getstring lura null, ejja ma tipproċedi. Xi ħaġa li marret ħażin. Issa dan huwa kemmxejn tedjanti iżda konvenzjonali C. char max probabbilment jirrappreżenta biss dak li ibbażata fuq l-isem tagħha? Huwa kostanti. Huwa bħall-valur numeriku tal- akbar char inti tista 'tirrappreżenta ma wieħed gidma, li huwa probabbilment l- 255, li hija l-akbar numru li jirrappreżentaw tmien bits, jibdew minn żero. Allura stajt jużaw dan, f'dan il-funzjoni, meta miktub dan il-kodiċi, biss minħabba jekk xi ħaġa tmur ħażin fil getchar iżda l-għan tagħha fil-ħajja huwa li jirritornaw char, inti jeħtieġ li b'xi mod ikunu jistgħu li sinjal lill-utent li xi ħaġa li marret ħażin. Aħna ma jkunux jistgħu jirritornaw null. Jirriżulta li null hija pointer. U għal darb'oħra, getchar għandha jirritornaw char. Allura l-konvenzjoni, jekk xi ħaġa tmur ħażina, huwa inti, l-programmer, jew F'dan il-każ, mal-librerija me, I kellha a biss tiddeċiedi arbitrarju, jekk xi ħaġa tmur ħażin, jien ser jirritorna l-għadd 255, li huwa verament jfisser li nistgħu ma, l-utent ma jistax tip il-karattru rappreżentata mill- numru 255 għaliex kellna steal bħala hekk imsejħa valur Sentinel jirrappreżentaw problema. Issa jirriżulta li l-karattru 255 mhix xi ħaġa inti tista tip fuq keyboard tiegħek, dan huwa no big deal. L-utent ma avviż li Stajt misruqa dan il-karattru. Imma jekk inti qatt tara fil-paġni bniedem fuq sistema tal-kompjuter xi referenza għal tappijiet kollha kostanti bħal din li jgħid, f'każijiet ta 'żbalji Dan jista' kostanti jiġu rritornati, li kollox xi bniedem ma snin ilu kien arbitrarjament iddeċidiet li jirritorna dan il-valur speċjali u sejħa hija kostanti fil-każ xi ħaġa tmur ħażin. Issa l-magic jiġri stabbiliti hawn. L-ewwel, jien tiddikjara f'konformità 67 żewġ karattri, C1 u C2. U mbagħad fil-linja 68, hemm attwalment linja ta 'kodiċi li l-reminixxenti tal ħabib tagħna printf, peress li ma jkollu mija Cs fil-kwotazzjonijiet. Imma avviż dak li qed jiġri hawn. sscanf ifisser scan string - ifisser skanja ifformattjat spag, sscanf Ergo. X'ifisser dan? Dan ifisser li inti tgħaddi għal sscanf string. U l-linja hija tkun xi tkun it-tipi utent pulzieri Inti tgħaddi għal sscanf string format simili dan li tg scanf liema huma inti bit-tama l-utent ikun ittajpjat pulzieri Inti mbagħad jgħaddu fil-indirizzi ta 'tnejn biċċiet ta 'memorja, f'dan il-każ, għaliex għandi żewġ placeholders. Hekk jien ser jagħti dan l-indirizz tal C1 u l-indirizz tal C2. U tfakkar li inti tagħti funzjoni tal- indirizz ta 'xi varjabbli, x'hemm l-implikazzjoni? X'jista 'dik il-funzjoni jagħmlu bħala riżultat li jagħtiha l-indirizz ta ' varjabbli, għall-kuntrarju il-varjabbli innifsu? Hija tista 'bidla, id-dritt? Jekk kellek xi ħadd mappa lil fiżika indirizz, jistgħu jmorru hemm u tagħmel kull ma jixtiequ f'dak l-indirizz. Istess idea hawn. Jekk aħna jgħaddu lill sscanf, l-indirizz ta 'żewġ biċċiet ta 'memorja, anke dawn ċkejkna biċċiet ftit ta 'memorja, C1 u C2, iżda aħna għid l-indirizz minnhom, sscanf tista 'bidla. Allura iskop sscanf fil-ħajja, jekk naqraw il-paġna bniedem, huwa li jaqra dak li l- utent ittajpjat fil, tama għall-utent li ittajpjat fil karattru u forsi karattru ieħor, u tkun xi tkun l-utent ittajpjat, l-ewwel karattru tmur hawn, it-tieni karattru tmur hawn. Issa, bħala twarrib, dan, u inti biss jafu dan mid-dokumentazzjoni, il-fatt li nressaq spazju vojt hemm ifisser biss li jien ma kura jekk l-utent hits-bar-ispazju ftit drabi qabel ma hu jew hi tieħu karattru, jien ser jinjora kull spazju abjad. Allura li, naf mill- id-dokumentazzjoni. Il-fatt li hemm tieni% a c segwit minn spazju abjad huwa attwalment intenzjonat. I jridu jkunu kapaċi li jikxfu jekk l-utent invitat up inkella ma kkooperawx. Hekk jien bit-tama li l-utent ittajpjat biss fil-karattru wieħed, għalhekk jien bit-tama li sscanf huwa biss se jirritorna l- valur ta '1 minħabba li, għal darb'oħra, jekk Naqra id-dokumentazzjoni, l-iskop sscanf fl ħajja huwa li jirritornaw għall-għadd ta ' varjabbli li ġew mimlija b'kontribut utent. I għaddew f'żewġ varjabbli indirizzi, C1 u C2. Jien bit-tama, madankollu, li wieħed biss mill- minnhom gets maqtula għaliex jekk sscanf prospetti 2, x'hemm preżumibbilment l-implikazzjoni loġikament? Li l-utent ma biss jagħtu me waħda karattru bħal I told lilu jew lilha. Huma probabbilment ittajpjat fil inqas żewġ karattri. Mela jekk jien minflok ma kellhomx it-tieni % C, I biss kellhom wieħed, li franchement tkun aktar intuwittivi approċċ, I think-ewwel daqqa t'għajn, int mhux se tkun kapaċi li jikxfu jekk l-utent ikun ġie jagħtik aktar input minn inti fil-fatt riedu. Allura dan huwa forma impliċita ta 'verifika żball. Imma dak I do avviż hawn. Ladarba jien ċert li l-utent tatni waħda karattru, I tilliberalizza l-linja, tagħmel l-oppost ta 'getstring, li mbagħad użi malloc, u mbagħad I lura C1, il-karattru li I ttamat l- utent sakemm u sakemm biss. Allura a quick glimpsed biss, imma xi mistoqsijiet dwar getchar? Aħna ser jiġu lura uħud mill-oħrajn. Well, let me imorru quddiem u tagħmel dan - jissoponi issa, biss biex jimmotivaw tagħna diskussjoni fil-ġimgħa plus ħin, dan huwa fajl imsejjaħ structs.h. U għal darb'oħra, dan huwa biss togħma ta 'xi ħaġa li tinsab quddiem. Iżda avviż li ħafna ta 'dan huwa kummenti. So let me jenfasizzaw biss il- parti interessanti għal issa. typedef - hemm l-istess keyword mill-ġdid. typedef nużaw biex tiddikjara string bħala tip ta 'data speċjali. Tista 'tuża typedef biex joħolqu marka ġdida tipi ta 'data li ma kinux jeżistu meta C ġiet ivvintata. Per eżempju, int jiġi ma C. char jiġi ma C. doppja tiġi ma C. Iżda hemm l-ebda kunċett ta 'student. And yet jkun pjuttost utli biex ikun kapaċi jikteb programm li taħżen fil-varjabbli, għadd ID ta 'student, isem tagħhom, u d-dar tagħhom. Fi kliem ieħor, tliet biċċiet ta 'data, bħal int u spag u ieħor spaga. Bil typedef, x'hemm pretty qawwija dwar dan u l-sturct keyword għal istruttura, inti, l-programmer fl-2013, jistgħu attwalment tiddefinixxi stess l tiegħek tipi ta 'data li ma kinux jeżistu snin ilu iżda li jaqdu skopijiet tiegħek. U hekk hawn, fil-linji 13 permezz 19, aħna qed tiddikkjara tip ta 'data ġdida, bħall- l int, iżda ssejjaħ dan student. U ġewwa ta 'din il-varjabbli se jkun ta 'tliet affarijiet - l INT, string, u string. Allura inti tista 'taħseb x'hemm verament ġara hawn, anke jekk din hija daqsxejn ta 'simplifikazzjoni għal-lum, student essenzjalment se biex teżamina bħal dan. Tagħha ser tkun blokki ta ' memorja ma 'ID, isem qasam, u qasam dar. U aħna ser ikunu jistgħu jużaw dawk biċċiet ta ' memorja u l-aċċess għalihom kif ġej. Jekk immur fis struct0.c, hawnhekk hija relattivament twil, iżda wara mudell, tal-kodiċi li tuża dan trick ġdid. Allura l-ewwel, let me niġbidlek l-attenzjoni għall-partijiet interessanti top up. Sharp jiddefinixxi istudenti 3, tiddikjara imsejħa istudenti kostanti u assenjati huwa arbitrarjament-numru 3, biss so I jkollhom tliet studenti li jużaw dan il-programm għal issa. Hawnhekk tidħol Main. U avviż, kif nista niddikjara firxa ta 'studenti? Well, I biss tuża l-istess sintassi. L-istudent kelma hija ovvjament ġdid. Iżda studenti, klassi, l-istudenti parentesi. Allura sfortunatament hemm ħafna ta 'użu mill-ġdid ta' termini hawn. Dan huwa biss numru. Allura dan huwa simili qal tlieta. Klassi huwa biss dak li nixtieq li jsejħu l-varjabbli. I jistgħu sejħa hija istudenti. Iżda klassi, din mhix klassi fi oġġett orjentati Java tip ta 'mod. Huwa biss klassi ta 'studenti. U t-tip tad-data ta 'kull element f'dak array huwa student. Allura dan huwa xi ftit differenti u minn tgħid xi ħaġa bħal dan, huwa biss - Jien qal jagħtu me tliet studenti u sejħa dik il-klassi array. Kull dritt. Issa hawn loop erbgħa. Familjari Dan Guy - jtenni minn żero fuq sa tlieta. U hawnhekk l-biċċa ġdida ta 'sintassi. Il-programm għaddej biex iwassluni, il-bniedem, biex tagħtiha student ID, li hija int. U hawnhekk l-sintassi li magħhom inti tista ' jaħżnu xi ħaġa fil-qasam ID fi klassi post bracket I. So dan sintassi mhix xi ħaġa ġdida. Dan ifisser biss jagħtu me-tmien student fil-klassi. Iżda dan is-simbolu huwa ġdid. Sa issa, aħna ħadthom ma tistax tintuża dot, inqas fil-kodiċi bħal dan. Dan ifisser mur l-Struct magħruf bħala student u xi ħaġa hemmhekk. Bl-istess mod, f'dan il-linja li jmiss, 31, go quddiem u tpoġġi kwalunkwe tipi l-utent għal isem hawn u dak li jagħmlu għal house, l-istess ħaġa, imorru quddiem u poġġih fil. house. Allura dak li ma dan il-programm finalment do? Tista 'tara teaser ftit hemmhekk. Let me imorru quddiem u do jagħmlu structs 0 dot mmejla Struct 0, ID istudent 1, jgħidu David Mather, student ID 2. Rob Kirkland, student ID 3. Lauren Leverit - u l-unika ħaġa dan il-programm ma, li huwa biss kompletament arbitrarja, huwa Jien ridt li tagħmel xi ħaġa ma din id-data, issa li stajt mgħallma us kif użu structs, huwa I biss kellhom dan loop extra hawn. I jtenni fuq il-firxa ta 'studenti. I użati, ħabib forsi issa familjari tagħna, string iqabblu, stircomp li verifika huwa d-dar 8 istudent daqs Mather? U jekk iva, biss print xi ħaġa arbitrarju simili, iva, huwa. Iżda għal darb'oħra, biss jagħtu me opportunitajiet għall-użu u użu mill-ġdid u użu mill-ġdid dan dot notazzjoni ġdida. Allura quién, right? Ġejjin bi programm istudent ikun kemmxejn arbitrarja, iżda jirriżulta li nistgħu nagħmlu affarijiet utli ma dan, per eżempju kif ġej. Din hija Struct ħafna aktar ikkumplikat fl C. Huwa ltqajna tużżana jew aktar oqsma, kemmxejn cryptically jismu. Imma jekk inti stajt qatt semgħu ta 'grafika format tal-fajl imsejħa Bitmap, BMP, huwa Jirriżulta li l-format tal-fajl Bitmap pretty ħafna qisu li dan. Huwa wiċċ stupid Smiley ftit. Huwa image żgħira li stajt żżomjati fuq pretty big hekk li I tista 'tara kull tal-tikek individwali jew pixels. Issa, jirriżulta nistgħu jirrappreżentaw dot iswed, ngħidu aħna, in-numru 0. U dot abjad bin-numru 1. Allura fi kliem ieħor, jekk inti tixtieq li tiġbed Wiċċ smiley u ħlief li l-immaġni fil- kompjuter, huwa biżżejjed li jaħżen żerijiet u dawk li jixbhu dan, fejn, għal darb'oħra, dawk huma bojod u żerijiet huma suwed. U flimkien, jekk inti effettivament ikollhom a gird ta dawk żerijiet, inti għandek grid ta 'pixels, u jekk inti jistabbilixxu out, inti għandek ħelu ftit wiċċ Smiley. Issa, format tal-fajl Bitmap, BMP, huwa effettivament li taħtha il-barnuża, iżda b'aktar pixels Sot li inti jistgħu attwalment jirrappreżentaw kuluri. Imma meta jkollok aktar sofistikati formati tal-fajl bħal BMP u JPEG u GIF li magħhom inti tista 'tkun familjari, dawk fajls fuq disk tipikament mhux biss jkollhom żero u dawk għall-pixels, imma għandhom xi metadata kif ukoll - meta fis-sens li mhuwiex verament data iżda huwa utli li jkollhom. Allura dawn l-oqsma huma hawn jimplika, u aħna ser tara dan f'aktar dettall fil P-set 5, li qabel l-żero u dawk li jirrappreżentaw l-pixels fi immaġini, hemm mazz ta 'metadata bħal id-daqs tal-immaġni u l- wisa 'tal-immaġini. U tinnota jien tnittif off xi affarijiet arbitrarji hawn - wisa 'u għoli. Għadd bit u xi affarijiet oħra. Allura hemm xi metadata fil-fajl. Iżda billi wieħed jifhem kif il-fajls huma stabbiliti out b'dan il-mod, inti tista 'attwalment imbagħad jimmanipulaw immaġini, jirkupraw immaġini minn disk, resize immaġini. Imma inti ma tistax neċessarjament itejbu lilhom. I meħtieġa ritratt. So I marru lura għal RJ hawn, li inti raw fuq l-iskrin pjuttost xi żmien ilu. U jekk I jiftħu Keynote hawn, dan huwa x'jiġri jekk inti tipprova li zoom u itejbu RJ. Huwa ma jkollna xi aħjar verament. Issa Keynote huwa tip ta ċajpir hu ftit, biss biex tleqqija fuq il- fatt li RJ ma jiksbu partikolarment msaħħa meta inti zoom pulzieri U jekk tagħmel dan il-mod, tara l-kwadri? Yeah, inti tista 'definittivament tara il-kwadri fuq projector. Dan huwa dak ikollok meta inti ittejjeb. Iżda fil-fehim kif RJ tagħna jew l- Smiley wiċċ hija implimentata se let us attwalment jikteb il-kodiċi li jimmanipula dawn l-affarijiet. U ħsibt I d tintemm fit din in-nota, ma 55 sekondi ta 'jtejjbu dik l- I DARE, ngħidu aħna pjuttost qarrieqa. [Daqq video] -Hu tinsab. Dwar dak, I do not know. Allura dak li-nafu? Li fil-09:15 Ray Santoya kien fil-ATM. Għalhekk il-kwistjoni-huwa dak kien hu tagħmel fi 9:16? -Isparar-disa millimeter fuq xi ħaġa. Forsi hu ra l-sniper. -Or kien jaħdem miegħu. Stenna-. Mur lura waħda. Liema taħseb? Wassal-wiċċ tiegħu up, full screen. Tiegħu-nuċċalijiet. -Hemm riflessjoni. -Dik hija l-tim tal-baseball Neuvitas. C'est logo tagħhom. -U hu jitkellem lil min hu liebes ġakketta li. [Daqq video END] DAVID J. Malan: Dan se jkun Problema Set 5. Aħna se tara inti ġimgħa d-dieħla. SPEAKER MALE: Fl-CS50 jmiss. [Crickets chirping] [Daqq tal-mużika]