[Jwe mizik] DAVID J. Malan: Tout dwa. [Ri] Byenveni tounen. Sa a se CS50. Lè sa a fen semèn senk. Men, moute jouk koulye a, nou te bèl anpil te pran pou yo akòde ke gen egziste sa a du, rezone, ke ou te te envoke pa fason pou sa a lòt zouti ki rele Fè ke yon jan kanmenm maji konvèti Kòd sous ou nan Kòd objè, zewo yo ak moun yo ki CPU òdinatè ou a, santral inite pwosesis, aktyèlman konprann. Men, li vire soti gen yon nimewo ki nan ale sou anba kapo a nan ant opinyon ak pwodiksyon. Apre sa, mwen ta renmen pwopoze ke nou kò ki soti nan yon detay ti kras pi plis nan etap sa yo kat yo, yo gen yon bagay yo rele pre-pwosesis, yon bagay rele élaboration, ki nou te wè, yon bagay yo rele rasanble, ak yon bagay yo rele ki lye ak. Se konsa, moute jouk koulye a, nan kèk nan nou an pwogram yo, nou te gen byen file gen ladan. Plis dènyèman nou te gen kèk byen file defini pou konstan. Se konsa, li sanble ke bagay sa yo ke yo genyen prefiks yo ak senbòl regle oswa senbòl nan liv yo se pre-processeur direktiv. Se jis yon fason anpenpan nan li di li nan yon liy nan kòd ki la aktyèlman konvèti nan yon lòt bagay anvan an òdinatè menm eseye konvèti ou pwogram nan zewo ak moun yo. Pou egzanp, byen file gen ladan estanda I / O. H, bèl anpil jis vle di ale devan, gen tan pwan sa ki nan dosye yo stdio.h epi kole yo dwa gen. Se konsa, pa gen okenn zewo ak moun yo nan pwen sa a ankò. Li nan reyèlman jis yon sibstitisyon. Epi sa a, fè pandan sa yo rele an- pre-pwosesis etap, lè ou aktyèlman kouri sonnen oswa espesyalman Fè nan pifò ka yo. Se konsa, tout sa ki te pase premye otomatikman konsa byen lwen. Lè sa a, vini etap la konpilasyon. Men, nou ve yo te twò senplifye konpilasyon. Konpile yon pwogram vrèman vle di pran an li soti nan yon bagay tankou C, Kòd sous nou ve yo te ekri, desann nan yon bagay yo rele asanble. Asanble lang se yon pi ba nivo lang sa, Erezman, nou pap yo te anpil okazyon ekri sa a semès la. Men, li la nan nivo ki pi ba a nan la sans ke ou literalman kòmanse ekri adisyon ak soustraksyon ak anpil anpil pitit ak chaj soti nan memwa ak sove nan memwa, nan anpil debaz enstriksyon ki yon òdinatè, anba kapo a, aktyèlman konprann. Anfen, rasanble pran ke lang zewo yo ak moun yo ke nou ve yo te ki dekri konsa byen lwen. Men, se vre wi: anfen, gen nan sa yo rele an ki lye ak faz, ki nou pral wè nan jis moman sa yon, ki konbine zewo ou ak moun yo ak zewo ak yo menm lòt moun anvan ou te kreye. Se konsa, konsidere sa a super pwogram ki senp. Li te soti nan Semèn 1. Li jis te di, Bonjou Mondyal la, sou ekran an. Nou kouri sa a nan sonnen. Oswa nou kouri l 'nan fè ki kouri sonnen. Men, outputted la nan moman kote kèk zewo ak moun yo. Men, li vire soti gen nan yon etap entèmedyè. Si mwen ale sou isit la - Wouch, pa t ' vle wè l 'ankò. Si mwen ale sou isit la yo aparèy mwen ak mwen louvri moute hello.c, isit la se ke pwogram menm. Ak sa ki mwen pral fè nan tèminal mwen fenèt isit la se mwen pral kouri sonnen olye ke Fè, ki automatise tout kat nan moun ki etap pou nou. Ak mwen se pral fè rezone-S ak Lè sa a, hello.c ak Lè sa a antre. Apre sa, mwen jwenn yon èd memwa kliyote ankò, sa ki byen. Epi, koulye a nan yon lòt fenèt yon ti kras pi gwo, Mwen pral louvri moute jdi nan isit la. Men, mwen pral louvri moute yon dosye sa, vire soti, yo rele hello.s sa a ki gen ladan lang asanble Mwen refere yo bay pi bonè. Lè sa a se sa ki rele asanble lang, san patipri ba nivo enstriksyon ki CPU Intel ou oswa tou sa li se sa a, se andedan konprann. Men, mov se pou deplase. rele se pou rele, yon fonksyon nivo ki ba anpil. sub se pou soustrè. Se konsa, lè ou gen yon CPU patikilye andedan nan òdinatè w lan, sa ki fè li distenk, kont lòt proseseur sou la mache, se ki enstriksyon li konprann epi byen souvan yo ki jan efikas li se, konbyen vit li se nan egzekite kèk nan tout sa yo enstriksyon yo. Koulye a, pou plis enfòmasyon sou sa a, ou ka pran ann otòn pwochen CS61 nan kolèj la. Men, isit la nou gen, pou egzanp, yon kèk Out bann kod ki ta ka gade yo konnen yo. hello.c se non an nan pwogram nan. . Tèks - gen nan pa anpil nan enterè gen jis kounye a, sonje ke tèks la segman, kòm nan Lendi, se kote nan memwa pwogram ou an aktyèlman fini moute. Se konsa, sa a, se omwen vagman abitye a. Isit la, nan kou, se yon chwa nan prensipal fonksyon nou an. Defile desann, sa yo, al gade nan bagay sa yo anrejistre yo rele, anpil ti fragman nan andedan memwa nan CPU aktyèl ou yo. Men, si mwen desann menm pi lwen, mwen wè kèk sòt endirèk mansyone nan ASCII. Lè sa a, tout bon, se ke fisèl, hello, vigil, nan lemonn. Se konsa, depi lontan istwa kout, sa a te gen k ap pase pou ou, otomatikman, anba kapo a tout tan sa a. Men, sa ki te pase reyèlman se yon fwa ou te kouri sonnen, oswa pa fason pou Fè, w ap vin an premye, nan kòd la sous, nan sa yo rele lang asanble. Lè sa a, rezone se konvèti sa a asanble lang desann nan zewo ak moun yo. Lè sa a se glise a ke nou te kòmanse diskisyon nou an nan Semèn 0 sou - ak Lè sa a Semèn 1 sou. Lè sa a, finalman, moun zewo ak moun yo yo konbine avèk zewo yo ak moun yo nan men moun bibliyotèk nou ve yo te pran pou yo akòde tankou Creole mwen an / O oswa Bibliyotèk fisèl oswa menm bibliyotèk la CS50. Se konsa, nan penti foto sa a plis vizyèlman, nou gen hello.c. Epi li, nan kou, itilize printf la fonksyone vle di, alo nan lemonn. Etap la konpilasyon pran li desann nan ki dosye nou jis te wè hello.s, menm menm si ke nan tipikman efase otomatikman pou ou. Men, sa a kòd la tout pèp nan etap la presegondè. Lè sa a, lè nou rasanble tout pèp la lang, se konsa pale, sa a, se lè ou jwenn sa yo zewo ak moun yo. Se konsa, nou te agrandi nan efektivman jodi a sou ki sa nou ve yo te pran pou yo akòde, vle di pral Kòd sous fè objeksyon kòd. Men, alafen, kounye a ke foto menm - kite a bouskile li sou nan bò men gòch. Men, sonje ke nan tèt la gen Mwen mansyone stdio.h. Sa se yon dosye ke nou te enkli nan prèske tout nan la pwogram nou te ekri nan Liv la. Epi sa a, dosye a ki gen ladan jwenn kopi kopye, efektivman anlè Kòd ou. Men, li sanble ke, sou yon òdinatè sistèm yon kote, gen nan prezimableman yon stdio.c dosye ke yon moun te ekri ane de sa ki aplike nan tout la fonksyon ki te deklare nan stdio.h. Koulye a, an reyalite li la pwobableman pa sou ou Mac oswa PC ou oswa menm nan la CS50 aparèy la se yon anvan tout koreksyon C kòd. Yon moun ki deja konpile li epi li enkli . O dosye pou Kòd objè oswa. Yon dosye, ki vle di yon bibliyotèk pataje sa a te pre-enstale ak pre-konpile pou ou. Men, si ke gen tout bon ki egziste sou stdio.c konpitè nou an nan paralèl ak sonnen. Nan Kòd ou ke yo te konpile ansanm, yo sanble. se stdio.c nan Kòd yo te konpile ak reyini, se konsa ke sa a trè dènye etap, desann isit la, nou gen yon jan kanmenm lyen, se konsa pale, zewo ou ak moun yo ak li oswa li zewo ak moun yo nan yon sèl senp pwogram ki finalman se rele jis Hello. Se konsa, ki nan tout nan majik la sa a, se te pase konsa byen lwen. Epi yo pral kontinye pran sa yo pwosesis pou yo akòde, men mwen reyalize gen nan yon anpil nan detay juicy ale sou anba a. Lè sa a se sa ki fè ou òdinatè ki gen Intel andedan patikilyèman diferan. Se konsa, sou ki nòt, si ou ta renmen rantre nan nou pou manje midi sa a Vandredi, fè ale cs50.net/rsvp la kote dabitid, 1:15 PM sa a Vandredi. Epi, koulye a yon anons kèk. Se konsa, nou gen kèk bon nouvèl. Epi nou gen kèk move nouvèl. Kòmanse ak kèk bon nouvèl isit la. [Rèl] Tout dwa. Oke, li la teknikman yon jou fèt, se konsa li nan pa tèlman yon kado nan men nou. Men, Lè sa a, move nouvèl yo nan kou. [Rèl] Mwen te pase anpil tan sou sa yo Animations. [Ri] Li pral fè yon sesyon revizyon sa a ap vini Lendi. Li k ap pase yo dwe nan 5:30 PM. Nou pral fè ou sonje nan tout detay sa yo via imel sou la kou a sou sit wèb nan jis yon koup de tan jou. Li pral filme-li yo e te fè ki disponib yon ti tan apre sa. Se konsa, si ou pa ka fè ke Lendi plas mitan lannwit, pa enkyete. Seksyon semèn sa a ap vini pral tou konsantre sou revizyon pou egzamen an. Si seksyon ou se nan Lendi, ki se tout bon inivèsite jou ferye, n ap toujou satisfè nan seksyon. Si ou tou senpleman pa ka fè sa seksyon paske w ap ale ale, sa a, se amann. Patisipe nan yon dimanch oubyen yon Madi seksyon oswa melodi-an nan seksyon Jason a, ki se disponib sou entènèt. Se konsa, plis move nouvèl. Se konsa, dapre progranm a, nou gen konferans Vandredi kap vini. Men, bon nouvèl la - byen klè, mwen te pase twòp tan sou sa. [Ri] Nou pral anile pwochen konferans Vandredi a. Se konsa, ki pral gen yon kado pou nou, kidonk, ou ka vrèman gen yon relèv bèl nan ant semèn sa a ak de semèn isit la. Se konsa, pa gen okenn konferans nan semèn kap vini, jis yon ti ti kras egzamen, pou ki ou ta dwe ap resevwa de pli zan pli eksite. Se konsa, kite a kounye a vire atansyon nou nan yon bagay ki se vre plis vizyèl ak plis enteresan ak yo mete sèn nan pou sa k ap pase yo dwe sou orizon an nan jis yon koup de tan semèn. Apre egzamen an premye, nou pral vire nan konsantre nan seri pwoblèm nou yo nan yon lòt domèn espesifik pwoblèm, sa yo ki an forensics oswa sekirite plis jeneralman. An reyalite, tradisyon an ak pwoblèm sa a seri a se pou m 'youn nan la anseye parèy oswa sèrtifikasyon mache atravè lakou lekòl la pran kèk foto nan idantifye men ki pa moun evidan, kote, oswa bagay sa yo, Lè sa a, chak ane mwen yon jan kanmenm jere aksidantèlman efase oswa Piga digital medya kat la sa a, se andedan nan kamera nou an. Men, pa gen kontra gwo. Mwen ka ale pi devan ak ploge ki nan òdinatè mwen an. Mwen ka fè yon imaj mediko-legal nan li, se konsa yo pale, lè w kopye zewo yo ak moun koupe nan ki kat memwa, si wi ou non yon li yo SD kat oswa kontra enfòmèl ant kat flash oswa tou sa ou ap abitye avèk yo. Lè sa a, nou ka men ki soti. Se konsa, defi a devan ou, nan mitan lòt bagay pou ou, yo pral ekri C kòd ki restaure yon pakèt antye nan JPEGs pou m 'ak devwale yo pral moun sa yo, kote, oswa bagay sa yo. Epitou, n ap tou pale, nan pwoblèm sa a mete ak nan jou k'ap vini yo, sou grafik pi plis jeneralman. Nou te itilize yo, yon kou, pou kraze soti. Men, ou te sòt de pran pou yo akòde gen egziste sa yo nosyon wo nivo nan rektang ak oval. Men, anba kapo a gen piksèl. Men, ou te kòmanse panse sou sa yo. Oswa ou pral pou p-seri 4 bezwen panse sou diferans ki genyen ant brik ou, ki jan byen vit w ap boul ap deplase atravè ekran an pou kraze soti. Se konsa, gen sa a nosyon nan la pwen sou ekran ou a ki nan antre nan jwe deja. Koulye a, sa ou wè, menm si, se sa ki ou jwenn sou yon ekran òdinatè. Si ou te janm gade kèk bon oswa move televizyon, chans yo se yo bèl anpil trete odyans lan tankou technophobes ki pa fè sa vrèman konnen anpil sou informatique. Se konsa, li trè fasil pou polis la detektif vle di, ou kapab netwaye ki moute pou m 'konsa? Oubyen pou ogmante, dwa? Amelyore, se tankou pawòl Bondye a Buzz nan pi nenpòt ki krim ki gen rapò ak montre sa. Men, reyalite a se si ou pran yon trè twoub foto nan yon moun ki sispèk ap fè yon move bagay, ou pa kapab jis amelyore li. Ou pa ka rale nan enfiniman. Ou pa ka wè nan briye an nan yon moun nan je ki komèt ki patikilye krim, malgre la prévalence de sa a sou televizyon. Se konsa, ak sa yo ki kite a motive ki k ap vini pwoblèm mete ak yon aperçu nan kèk montre ak kote ou ta kapab yo konnen yo. [Lèktur videyo] -OK. Koulye a, kite a jwenn yon gade bon nan ou. -Kenbe li. Kouri ki tounen. -Rete tann yon minit. Ale dwat. -Gen. Friz sa. -Konplè ekran. -OK. Friz sa. -Sere moute sou sa, pral ya? -Vektè nan sou ke nèg pa volan an tounen. -Zoom nan dwa isit la sou plas sa a. -Avèk ekipman dwat la, imaje la yo ka elaji ak file. -Ki sa ki nan sa? -Se yon pwogram amelyorasyon. -Èske ou ka klè ke moute nenpòt? -Mwen pa konnen. Se pou yo amelyore li. -Amelyore seksyon A-6. -Mwen ogmante detay a ak - -Mwen panse ke gen nan ase yo amelyore. Lage l 'bay ekran m' yo. -Amelyore refleksyon a ki nan je li. -Se pou yo kouri sa a nan amelyorasyon videyo. -Edgar, ou ka amelyore sa a? -Kwoke sou. -I've te ap travay sou sa a refleksyon. -Yon moun refleksyon an. -Refleksyon. -Gen yon refleksyon nan figi moun la. -Refleksyon nan. -Gen yon refleksyon. -Rale nan sou glas la. -Ou ka wè yon refleksyon. -Èske ou ka amelyore imaj la soti isit la? -Èske ou ka amelyore l 'dwa isit la? -Èske ou ka amelyore li? -Èske ou ka amelyore li? -Èske nou ka amelyore sa a? -Èske ou ka amelyore li? -Kenbe yon dezyèm fwa, mwen pral amelyore. -Rale nan sou pòt la. -X10. -Zoom. [Ri] -Deplase pous -Rete tann, sispann. -Stop. -Pran yon poz li. -Vire yon degre 75 nan vètikal la, tanpri. [Ri] -Stop, ak tounen yo nan pati a sou pòt la ankò. -Got yon aktivateur imaj ki ka bitmap? -Petèt nou ka sèvi ak Sen an Pradeep metòd yo wè nan fenèt la. -Sa a lojisyèl se leta nan atizay la. -Icon valè a se nan. -Avèk konbinezon an dwa nan algoritm. -Li te pran algoritm lumières nivo siperyè-a e mwen ka sèvi ak yo nan amelyore foto sa a. -Fèmen sou yo ak sou elaji z-aks la. -Amelyore. -Amelyore. -Amelyore. -Glase ak amelyore. [Lèktur videyo END] DAVID J. Malan: Se konsa, Set Pwoblèm 5 se sa ki bay manti devan la. Se konsa, nou pral byento jwenn yon pi bon konprann nan lè ak poukisa ou kapab ak nou yo pa kapab amelyore nan fason sa a. Men, anvan, se pou yo tounen atansyon nou nan kèk nan blòk yo bilding nou pral bezwen pou kapab di ke istwa. Se konsa, sonje ke nou te trase foto sa a sou Lendi ak yon ti kras semèn pase a. Lè sa a dekri Layout nan de bagay sa yo nan memwa òdinatè w lan an lè kouri kèk pwogram lan. Segman nan teknoloji moute tèt, sonje, refere zewo yo reyèl ak moun yo ki konpoze pwogram ou an. Genyen, anba a ki, gen kèk initialisé oswa uninitialized done, ki tipikman refere a bagay sa yo tankou konstan oswa strings oswa varyab mondyal ki gen yo te deklare an davans. Genyen pil wòch la, men nou ap vin tounen nan ke nan yon ti jan. Lè sa a, gen nan chemine a. Anpil tankou yon pil nan plato ki anba po nan la kafeterya, sa a se kote memwa vin kouch ak kouch chak fwa sa ou te fè nan yon pwogram? Ki sa ki se itilize nan chemine pou? Yeah? Rele nan fonksyon. Nenpòt ki lè w rele yon fonksyon, li nan bay tranch nan memwa pou li yo varyab lokal oswa paramèt li yo. Men, pictorially, nou wè ke ak chak siksesif fonksyon rele, lè yon apèl B apèl C D Kout telefòn yo, yo jwenn kouch sou pil la. Men, nan chak nan sa yo tranch memwa se esansyèlman se yon sijè ki abòde inik pou sa fonksyon, ki, nan kou, se yon pwoblèm si ou vle lage soti nan yon fonksyon nan yon lòt Yon moso nan done ke ou vle li k ap oswa chanje. Se konsa, sa ki te solisyon nou yo pèmèt Yon fonksyon reprezante pa yon sèl chemine ankadreman chanje memwa a andedan nan yon lòt ankadreman chemine? Kouman fè moun pale de youn ak lòt? Se konsa, pa fason pou endikasyon oswa adrès, ki, ankò, jis dekri ki kote nan memwa, pa fason pou yon espesifik nimewo mòde, an patikilye nan valè ka jwenn. Se konsa, sonje dènye fwa twò nou kontinye istwa a, li gade yon san patipri buggy pwogram nan. Men, pwogram sa a se buggy pou yon kèk rezon ki fè, men se yon sèl la ki pi inkyétant se paske li echwe yo tcheke ki sa? Yeah, li echwe yo tcheke D 'a. M regrèt? Si li nan plis pase 12 karaktè. Se konsa, trè smartly, lè w rele nan memcopy, ki, kòm non an sijere, jis kopi memwa soti nan agiman dezyèm li yo nan premye agiman li yo. Agiman nan twazyèm, trè smartly, se tcheke a asire w ke ou pa fè sa kopye plis pase, nan ka sa a, longè nan ba, kantite karaktè, nan destinasyon an, ki se sa a etalaj C. Men, pwoblèm nan se ke sa ki si C tèt li se pa gwo ase okipe sa? W ap ale nan kopi ki kantite bytes ke ou ve yo te bay yo. Men, sa ki ou gen aktyèlman plis bytes pase ou gen plas pou? Oke, pwogram sa a tankou moun fou jis je fèmen montan yo pran tou sa li a yo bay yo, alo antislach 0 se gwo si fisèl se kout ase, tankou senk charaktèr. Men, si li la aktyèlman 12 karaktè oswa 1,200 karaktè, nou te wè dènye fwa ke w ap jis ale nan konplètman recouvrir memwa ki pa fè pati nan ou. Men, pi move ka, si ou recouvrir ki wouj pòsyon gen ke nou rele an retounen adrès - sa a se jis kote òdinatè a otomatikman, pou ou, dèyè a sèn, bord lwen yon valè 32-ti jan ki raple li nan sa ki adrès li ta dwe retounen lè foo, fonksyon sa a ak lòt, se fè egzekite. Li se yon myèt pen nan kalite nan ki li retounen. Si ou recouvrir sa, ki kapab, si w ap nèg la move, kapab te kapab potansyèlman pran sou òdinatè yon moun. Epi ou pral pi sètènman aksidan li nan pifò ka yo. Koulye a, te pwoblèm sa a sèlman anvayi jan nou te kòmanse pale sou memwa jesyon plis jeneralman. Men, malok, pou alokasyon memwa, se yon fonksyon ki nou kapab itilize asiyen memwa lè nou pa konnen an avans ki nou ta ka bezwen kèk. Se konsa, pou egzanp, si m 'ale tounen aparèy la isit la. Apre sa, mwen louvri moute soti nan hello2.c tan sot pase yo, sonje pwogram sa a isit la, ki gade yon yon bagay ti kras tankou sa a, jis twa liy - endike non ou, Lè sa a, Non fisèl, sou bò gòch la, egal getstring. Lè sa a, nou enprime li soti, Non itilizatè a la. Se konsa, sa a te yon super pwogram ki senp. Pou yo kapab klè, kite m 'ale pi devan epi fè alo-2 a. Mwen pral fè dot koupe alo-2 a. Endike non ou - David la. Antre nan. Bonjou David la. Li sanble nan travay OK. Men, sa ki nan reyèlman ale sou anba kapo isit la? Premye a kite kale tounen kèk kouch. Chèn se jis yon synonym nou te reyalize pou ki sa? Char zetwal. Se konsa, kite a fè l 'yon ti kras pi plis Esoteric men plis teknikman kòrèk ke sa a se yon etwal Char, ki vle di ke Non, repons lan se wi, se yon varyab. Men, sa ki magazen Non kote adrès la nan yon Char, ki santi l yon ti kras etranj paske mwen vin tounen yon kòd. Mwen vin tounen miltip charaktèr pa yon Char. Men, nan kou, ou sèlman bezwen premye a adrès Char la sonje kote a fisèl antye se paske poukisa? Ki jan ou fè konnen ki kote nan fen fisèl la se konnen nan konmansman an? Zewo a antislach. Se konsa, ak de sa yo endikasyon ou konnen anvan kòmansman ak nan fen a nan nenpòt fil yo, toutotan yo ap byen fòme ak ki nil Terminator, ki zewo antislach. Men, sa a ap rele getstring. Men, li vire soti ki getstring te tout tan sa a te kalite kopye pou nou. Li te fè sa travay la, yo dwe asire, jwenn yon fisèl soti nan itilizatè a. Men, kote a ki memwa te vini soti nan? Si nou tounen nan foto a isit la ak aplike definisyon an soti nan jis yon moman sa de sa, ki chemine a se kote memwa ale lè fonksyon yo rele yo, pa ki lojik, lè ou rele getstring, ak Lè sa a mwen tape nan D-A-V-I-D Mete, kote se D-A-V-I-D antislach zewo estoke, ki baze sou la istwa nou te di nou byen lwen? Li ta sanble yo dwe nan chemine a, dwa? Lè ou rele jwenn fisèl ou jwenn yon ti tranch nan memwa sou pil la. Se konsa, li vle di rezon ki D-A-V-I-D antislach zewo estoke gen nan chemine a. Men, tann yon minit, getstring retounen ki fisèl, se konsa pale, ki vle di li nan plato ki soti nan kafeterya a se pran fèmen chemine a. Nou te reponn dènye fwa ke le pli vit ke yon retounen fonksyon, epi ou pran ki plato, se konsa pale, nan chemine a, ki sa ki ou ka asime sou sold yo nan ki memwa? Mwen sòt de redrew yo kòm mak kesyon paske yo efektivman vin valè sèks. Yo ka itilize l ankò lè kèk se pwochen fonksyon yo rele. Nan lòt mo, si nou rive yo dwe estoke - Mwen pral pran yon foto rapid isit la nan chemine a. Si nou rive yo dwe desen anba a nan segman memwa mwen, epi nou pral di ke sa a se plas la nan memwa okipe pa prensipal e petèt c ARG ak ARG v ak tout lòt bagay nan pwogram nan, lè getstring rele, prezimableman getstring vin yon moso nan memwa isit la. Lè sa a, D-A-V-I-D yon jan kanmenm fini moute nan fonksyon sa a. Men, mwen pral senplifye. Men, kite a sipoze ke li D-A-V-I-D antislach zewo. Se konsa, sa a bytes anpil yo te itilize nan ankadreman an pou getstring. Men, le pli vit ke retounen getstring, nou di dènye fwa ke sa a memwa sou isit la tout vin - woops! - tout vin efektivman efasman. Epi nou ka panse a sa a kounye a kòm kesyon mak paske moun ki konnen sa k ap pase yo vin nan ke memwa. Vreman vre, mwen trè souvan rele fonksyon lòt pase getstring. Lè m 'rele kèk lòt fonksyon pase getstring, petèt pa nan pwogram sa a an patikilye nou jis gade nan men gen kèk lòt, siman lòt kèk fonksyon ta ka fini yo te ba yo plas sa a kap vini yo nan chemine a. Se konsa, li pa kapab ki magazen getstring D-A-V-I-D sou chemine a, paske mwen ta imedyatman pèdi aksè a li. Men, nou konnen yo getstring sèlman retounen ki sa? Li pa nan retounen nan m 'sis karaktè. Ki sa ki li vrèman retounen t ' nou konkli dènye fwa? Postal la nan premye a. Se konsa, yon jan kanmenm, lè ou rele getstring, li nan allocation yon moso nan memwa pou fisèl la ki itilizatè kalite ak Lè sa a, retounen adrès nan li. Men, li vire soti ki lè ou vle fonksyone asiyen memwa nan sa a fason ak retounen nan moun ki te rele ki fonksyon, adrès la nan ki moso nan memwa, ou absoliman pa ka mete l 'nan chemine a nan la anba, paske fonksyonèl li nan jis pral pa vin pou ou trè byen vit, konsa ou ka pwobableman devine kote nou ap pwobableman ale nan jete l ' olye de sa, pil wòch la sa yo rele. Se konsa, ant anba a nan memwa ou a Layout ak tèt la nan memwa ou a Layout tout yon seri nan segments. Youn nan se chemine a, e yo gen dwa pi wo a li se pil wòch la. Men, pil wòch se jis yon moso diferan nan memwa ki pa nan itilize pou fonksyon yo lè yo ap rele. Li nan itilize pou memwa long tèm, lè ou vle yon fonksyon gen tan pwan kèk memwa epi yo dwe kapab kwoke sou li san yo pa pèdi kontwòl sou li. Koulye a, ou te kapab petèt imedyatman wè ke sa a se pa nesesèman yon konsepsyon pafè. Kòm pwogram ou an resevwa lajan memwa sou chemine a, oswa jan ou rele pi plis ak plis fonksyon, oswa jan ou asiyen memwa sou pil wòch la ak malok li kòm getstring ap fè, ki sa ki byen klè sanble ap inevitab pwoblèm? Dwa. Menm jan ak lefèt ke sa yo flèch yo montre nan chak lòt pa anonse byen. Ak tout bon, nou te ka trè byen vit aksidan yon pwogram nan nenpòt ki kantite fason. An reyalite, mwen panse ke nou ka gen fè sa aksidantèlman yon fwa. Oswa si se pa, se pou yo fè l ' fè espre kounye a. Kite m 'ale pi devan epi ekri super byen vit yon pwogram ki rele dontdothis.c. Epi, koulye a mwen pral ale nan isit la ak byen file gen ladan stdio.h. Se pou yo deklare fonksyon foo pran pa gen agiman, ki se deziye kòm byen pa anile. Men, bagay la sèlman foo ki pral fè se rele foo, ki pwobableman se la pa intélijant lide, men se konsa se pou li. Ent prensipal anile. Koulye a, bagay la sèlman prensipal ki pral fè se rele foo kòm byen. Epi jis pou anvwaye, mwen pral ale devan isit la ak di printf "Alo soti nan foo. " OK. Se konsa, si mwen pa t 'fè okenn erè, Fè dontdothis dot koupe. Li kite yo fè l 'nan yon fenèt pi gwo - dot koupe, dontdothis. Vini non sou. Uh oh. Aparamman, ou ka fè sa. Modi li. OK. Rete tann. Kanpe pa. Èske nou - Nou t 'sèvi ak li ak Fè. [Soupir] Mwen konnen men mwen panse ke nou jis efase sa. Uh, wi. Modi li. Rezoud sa a Rob. Ki sa? Li trè senp. Yeah, nou tounen tounen optimize la. OK, kanpe babay. Koulye a, mwen santi ou pi byen. OK. Tout dwa. Se konsa, kite a compile sa a - Fè ou dontdothis. Ou ka gen chanje non sa a dothis.c nan jis moman sa a. Gen nou ale. Mèsi poutèt ou. OK. Se konsa, lefèt ke mwen te enprime soti yon bagay te aktyèlman jis ralanti desann pwosesis la pa ki nou ta yo te rive jwenn pwen sa. OK. Phew! Se konsa, sa ki aktyèlman ale sou? Rezon ki fè la a, jis kòm yon sou kote, se fè anyen an tèm de opinyon ak pwodiksyon gen tandans ka pi dousman paske ou gen yo ekri karaktè a ekran, Li te gen a woulo liv. Se konsa, depi lontan istwa kout, te gen mwen aktyèlman ki te pase konsa enpasyan, nou ta gen wè rezilta sa a fen kòm byen. Kounye a ke mwen te resevwa woulib nan UPS yo ekri an lèt detache, nou wè li touswit. Se konsa, poukisa se sa kap pase. Oke, eksplikasyon an senp, nan kou, se ke foo pwobableman pa ta dwe dwe rele tèt li. Koulye a, an tèm jeneral, sa a se rkursyon. Men, nou te panse yon semèn koup Anons sa pibliye depi repetitif se yon bon bagay. Rkursyon se fason sa a majik nan eksprime tèt ou super suksen. Men, li jis travay. Men, gen se yon karakteristik kle nan tout pwogram yo repetitif nou te pale sou, li gade konsa byen lwen, ki te yo ke yo te ki sa? Yon baz ka-a, ki te gen kèk difisil kode ka ki te di nan kèk sitiyasyon pa rele foo, ki se byen klè pa ka a isit la. Se konsa, sa k ap fèt vreman an tèm de foto sa a? Bon, lè prensipal rele foo, li vin yon ti tranch nan memwa. Lè foo rele foo, li vin yon ti tranch nan memwa. Lè foo rele foo, li vin yon ti tranch. Li vin yon ti tranch. Li vin yon ti tranch. Paske foo pa janm retounen. Nou pa janm ap efase youn nan moun ki ankadreman ki soti nan chemine an. Se konsa, nou ap mouche nan pil wòch la, pa mansyone ki konnen ki lòt bagay, ak nou ap Depatman limit yo nan nou an sa yo rele segman nan memwa. Erè ale segmentation fo. Se konsa, solisyon an gen klèman pa fè sa. Men, enplikasyon nan pi gwo se ke, repons lan se wi, gen absoliman se kèk limit, menm si li pa nan byen defini, ki di kòman fonksyon anpil ou ka rele nan yon pwogram nan, konbyen fwa yon fonksyon ka rele tèt li. Se konsa, menm si nou te fè konnen mesaj rkursyon kòm bagay sa a ki kapab majik yon koup la semèn de sa pou sigma nan fonksyon, ak lè nou jwenn done yo estrikti yo epi CS50, ou ap wè lòt aplikasyon pou li, li pa nesesèman pi bon bagay. Paske si yon fonksyon rele tèt li, rele tèt li, menm si gen yon baz ka, si ou pa frape ki ka baz pou 1,000 apèl oswa 10,000 apèl, pa tan sa a ou ta ka genyen kouri soti nan chanm sou sa yo rele pil ou ak frape kèk segments lòt kote nan memwa. Se konsa, li tou se yon konsepsyon komès-off ant distenksyon ak ant fyabilite nan patikilye ou aplikasyon. Se konsa, gen nan yon lòt inconvénient oswa yon lòt gotcha nan sa nou te te fè konsa byen lwen. Lè m 'rele getstring - kite m 'ale tounen nan alo 2-. Remake mwen ap rele getstring, ki se retounen yon adrès. Epi nou fè reklamasyon jodi a ki adrès se soti nan pil la. Men, koulye a, mwen enprime soti nan fisèl nan ki adrès. Men, nou pa janm te rele nan opoze a getstring. Nou pa janm te gen calll yon fonksyon tankou ungetstring, kote ou men tounen ki memwa. Men, franchman nou pwobableman ta dwe. Paske si nou kontinye mande òdinatè a pou memwa, pa fason pou yon moun tankou getstring men pa janm bay li tounen, siman ki tou se mare yo mennen nan pwoblèm kijan nou kouri soti nan memwa. Men, an reyalite, nou ka gade pou sa yo pwoblèm ki genyen ak zouti nan nouvo ki gen itilizasyon se yon skre ti tape. Men, kite m 'ale pi devan, w'a vide l moute sou ekran an nan jis moman sa a. Mwen pral ale pi devan epi kouri Valgrind ak paramèt ki gen premye lòd agiman liy se non an nan pwogram sa a alo-2 a. Men, malerezman li nan pwodiksyon se atrociously konplèks pou okenn rezon bon. Se konsa, nou wè tout sa ki dezòd. David se bay non mwen. Se konsa, sa a, se pwogram nan aktyèlman kouri. Koulye a, nou jwenn sa a pwodiksyon. Se konsa, Valgrind se menm jan nan Lespri Bondye a gdb. Li pa yon debugjeur se pou chak. Men, li la yon korektè memwa. Li se yon pwogram ki pral kouri ou pwogram yo epi di ou si ou mande l 'yon òdinatè pou memwa epi pa janm lage l ' tounen, kidonk sa vle di ke ou gen yon fwit memwa. Men, dlo ap koule memwa gen tandans yo dwe move. Epi ou se itilizatè yo nan òdinatè gen pwobableman te santi sa a, si wi ou non ou gen yon Mac oswa PC yon. Èske w te janm itilize òdinatè w lan pou pandan y ap epi yo pa demare nan plizyè jou, oswa ou te jis te resevwa yon anpil nan pwogram kouri, ak bagay la modi ralanti nan yon kanpe fanm k'ap pile, oswa omwen li nan super anmèdan yo sèvi ak yo, paske tout bagay jis te resevwa super dousman. Kounye a ke kapab gen nenpòt ki kantite rezon. Li ta ka yon bouk enfini, yon ensèk nan Kòd yon moun nan, oswa, plis tou senpleman, li te kapab vle di ke w ap itilize plis memwa, oswa ap eseye, pase ou òdinatè aktyèlman gen. E petèt gen yon ensèk nan kèk pwogram ki kenbe mande pou memwa. Navigatè pou ane te repite pou sa a, mande pou pi plis ak plis memwa men pa janm Distribiye l 'tounen. Se vre wi, si ou sèlman gen yon fini kantite lajan pou memwa, ou pa ka mande enfiniman anpil fwa pou kèk nan ki memwa. Se konsa, sa ou wè la a, menm si ankò pwodiksyon Valgrind a se san nesesite konplèks nan zye nan premye, sa a se pati nan enteresan. Pil wòch - nan itilize nan sòti. Se konsa, isit la nan konbyen lajan memwa te nan itilize nan pil wòch la nan la tan pwogram mwen quitté - aparamman sis bytes nan yon blòk. Se konsa, mwen pral balanse men m ' nan sa ki yon blòk an se. Panse de li se jis yon moso, yon plis teknik mo pou moso. Men, sis bytes - ki sa yo bytes yo sis ki te toujou nan itilize? Egzakteman. D-A-V-I-D zewo antislach, senk lèt Non plis Terminator a nil. Se konsa, Valgrind pwogram sa a remake ke mwen mande pou sis bytes, aparamman, pa fason pou getstring, men pa janm te ba yo tounen. Men, an reyalite, sa a pa ta ka fèt konsa evidan si pwogram mwen an se pa twa liy, men li la 300 liy yo. Se konsa, nou ka aktyèlman bay yon lòt lòd agiman liy Valgrind fè li pi sil. Li se yon ti kras anmèdan sonje. Men, si mwen fè - kite a wè. Genyen fuit - Te li genyen fuit - menm Mwen pa sonje sa li ye sou men yo. - Fuit radyasyon-chèk egal plen. Oui, di ou mèsi. - Fuit radyasyon-chèk egal plen. Antre nan. Menm pwogram ap kouri. Tape nan David ankò. Koulye a, mwen wè yon ti kras plis detay. Men, pi ba a rezime an pil wòch la, ki se ki idantik ak kat - Ah, sa a se kalite bèl. Koulye a, Valgrind se aktyèlman kap yon ti kras pi difisil nan Kòd mwen. Epi li di ke, aparamman, malok nan liy - nou rale soti. Nan liy - nou pa wè sa ki liy li se. Men, malok se koupab la an premye. Genyen yon blog nan malok. Tout dwa? OK, pa gen. Dwa? Mwen te rele getstring. getstring aparamman rele malok. Se konsa, sa liy nan Kòd la se aparamman nan fay pou gen resevwa lajan sa a memwa? Se pou yo asime ke moun ki te ekri malok te alantou lontan ase ke li nan pa fòt yo. Se konsa, li la pwobableman mwen yo ye. getstring nan cs50.c - pou ki nan yon pote yon kote sou òdinatè a - nan liy 286 sanble ap koupab la. Koulye a, kite a sipoze ke cs50 te alantou pou desan kantite tan, se konsa tou nou menm nou yo reusi. Se konsa, li la pwobableman pa nan getstring ki pinèz la bay manti, men pito nan alo-2.c liy 18. Se konsa, kite a pran yon gade nan ki sa sa liy 18 te ye a. Oh. Yon jan kanmenm liy sa a se pa nesesèman buggy, se pou chak, men li se rezon ki fè yo dèyè ke fwit memwa. Se konsa, super tou senpleman, sa ki ta entwitif gen solisyon an isit la? Si nou ap mande pou memwa, yo te pa janm bay li tounen, e ke sa sanble gen yon pwoblèm paske sou tan òdinatè mwen ta ka kouri soti nan memwa, ta ka ralanti desann, move bagay ka rive, byen, sa ki nan solisyon an senp entwisyon? Jis ba l 'tounen. Ki jan ou fè libere ond ki memwa? Oke, Erezman li nan byen senp jis di gratis Non. Men, nou pa janm te fè sa a anvan. Men, ou ka esansyèlman panse a gratis kòm opoze a nan malok. gratis se opoze a nan allocation memwa. Se konsa, kounye a kite m 'compile sa a. Fè alo-2 a. Kite m 'kouri l' ankò. alo 2-David la. Se konsa, li sanble nan travay nan egzakteman menm jan an. Men, si mwen tounen nan Valgrind ak re-kouri ki bay lòd menm sou ki fèk mwen konpile pwogram nan, sezisman nan non mwen tankou anvan - bèl. Rezime pil wòch - nan itilize nan sòti - zewo bytes nan blòk zewo. Lè sa a se super bèl, tout blòk pil wòch yo te libere. Pa gen fwit yo posib. Se konsa, vini, pa ak mete Pwoblèm 4, Men, se avèk Set Pwoblèm 5, forensics yo ak pati, sa a twò ap vin yon mezi Correct nan ou pwogram nan, si wi ou non ou gen oswa ou pa gen fwit memwa. Men, Erezman, se pa sèlman ou ka rezon ki fè nan yo entwitif ki, se, joui, fasil pou pwogram ti men pi difisil pou pi gwo pwogram, Valgrind, pou pwogram sa yo pi gwo, ka ede w idantifye pwoblèm nan an patikilye. Men, gen yon pwoblèm lòt ki ka rive. Kite m 'louvri moute sa a ranpli isit la, ki se, ankò, yon egzanp yon ti jan senp. Men, nan kite konsantre sou sa ki pwogram sa a ap fè. Se sa yo rele memory.c. Nou pral poste sa a jodi a pita nan la postal nan kòd sous la jodi a. Ak Avi ke mwen gen yon fonksyon ki rele f ki pran pa gen agiman ak retounen pa gen anyen. Nan liy 20, mwen aparamman deklare yon konsèy nan yon Int ak rele li x. Mwen plase se retounen nan valè de malok. Men, jis yo dwe klè, ki jan anpil bytes am Mwen pwobableman ap resevwa tounen soti nan malok nan sitiyasyon sa a? Pwobableman 40. Ki kote ou jwenn ki soti nan? Byen, si w sonje ke yon Int se souvan 4 bytes, omwen li se nan la aparèy, 10 fwa 4 se evidamman 40. Se konsa, malok se retounen yon adrès nan yon moso nan memwa epi estoke ki adrese finalman nan x. Se konsa, yo dwe klè, ki sa ki Lè sa a, k ap pase? Oke, kite m 'chanje tounen sou foto a nou isit la. Kite m 'pa sèlman trase anba a nan mwen memwa òdinatè a, kite m 'ale pi devan epi trase rektang la tout antye ki reprezante tout nan RAM m 'yo. Nou pral di ke chemine a se sou anba a. Apre sa, nan yon segman tèks nan done yo uninitialized. Men, mwen jis ale nan abstrè sa yo lòt bagay lwen kòm dot, dot dot. Mwen jis ale nan, al gade nan sa a kòm pil wòch la nan tèt la. Lè sa a, nan pati anba a nan foto sa a, ki reprezante prensipal yo, mwen pral bay li yon memwa tranch sou pil la. Pou f, mwen pral bay li yon tranch nan memwa sou pil la. Koulye a, mwen te rive nan konsilte mwen Kòd sous ankò. Ki sa ki varyab yo lokal yo, pou prensipal yo? Aparamman pa gen anyen, se konsa ke tranch se efektivman vid oswa pa menm kòm gwo kòm mwen te trase li. Men, nan f, mwen gen yon varyab lokal yo, ki te rele x. Se konsa, mwen pral ale pi devan epi bay f yon ti moso nan memwa, rele li x. Epi, koulye a malok nan 4 10 fwa, Se konsa, 40 malok kote a ki memwa vini soti nan? Nou pa te trase yon foto renmen sa a anvan. Men, kite a sipoze ke li nan efektivman vini soti nan isit la, se konsa yon sèl, de, twa, kat, senk. Koulye a, mwen bezwen 40 nan sa yo. Se konsa, mwen pral jis fè dot, dot, dot sijere ki gen nan memwa menm plis vini tounen soti nan pil la. Koulye a, sa ki nan adrès la? Se pou yo chwazi abitrè nou adrese kòm toujou, - Ox123, menm si li la pwobableman pral yo dwe yon bagay konplètman diferan. Sa a adrès la nan multiple an premye nan memwa ke mwen mande malok pou. Se konsa, nan kout, liy yon fwa 20 ègzekutra, ki sa ki literalman estoke andedan nan x isit la? Ox123. Ox123. Epi dezyèm towo a se entérésan. Li jis vle di, isit la nan yon ekzadesimal nimewo. Men, sa ki nan kle se ke sa mwen te magazen nan x, ki se yon varyab lokal yo. Men, ki kalite done li yo, ankò, se yon adrès nan yon Int. Oke, mwen pral nan magazen Ox123. Men, ankò, si sa a, se yon ti kras twò konplike san nesesite, si mwen woulo liv tounen, nou kapab abstrè sa a ale byen rezonab ak jis di ke x ki se yon konsèy sa yo ki ti moso nan memwa. OK. Koulye a, kesyon an nan men se sa ki annapre yo - liy 21, li vire soti, se buggy. Poukisa? M regrèt? Li pa gen - di ke yon fwa plis. Oke, li pa fè sa gratis. Se konsa, sa a, se dezyèm nan men. Se konsa, gen nan yon lòt men espesyalman nan liy 21. Egzakteman. Liy sa a senp nan kòd se jis yon debòde tanpon, yon depase tanpon. Yon tanpon jis vle di yon ti moso nan memwa. Men, sa ti moso nan memwa se nan gwosè 10, 10 nonm antye yo, ki vle di si nou endèks nan li lè l sèvi avèk sik nan Massachusetts Institute of Technology nan notasyon etalaj, kare a parantèz, ou gen aksè nan x bracket 0 x bracket 1 x, bracket dot, dot, dot. x bracket 9 se youn nan pi gwo. Se konsa, si m 'fè x, 10 bracket kote Mwen aktyèlman pral nan memwa? Oke, si mwen gen 10 Int - kite a aktyèlman rale tout nan sa yo soti isit la. Se konsa, sa ki te senk an premye. Isit la nan lòt senk antye yo. Se konsa, x bracket 0 se isit la. x bracket 1 se isit la. x bracket 9 se isit la. x bracket 10 se isit la, ki vle di m'ap di, nan liy 21, òdinatè a yo mete nan nimewo ki kote? Nimewo a 0 ki kote? Oke, li nan 0, repons lan se wi. Men, jis lefèt ke 0 li yo se kalite yon konyensidans. Li ta ka nimewo a 50, pou tout sa nou pran swen. Men, nou ap eseye mete l 'nan x bracket 10, ki se kote sa a se make kesyon trase, ki se pa yon bon bagay. Pwogram sa a ta ka trè byen aksidan kòm yon rezilta. Koulye a, kite a ale pi devan epi wè si sa a se, tout bon, sa k ap pase. Fè memwa, depi dosye a rele memory.c. Se pou yo ale pi devan epi kouri pwogram memwa a. Se konsa, nou gen chans, aktyèlman, li sanble. Nou gen chans. Men, kite a wè si nou kouri kounye a Valgrind. Nan premye gade, pwogram m 'lan ka sanble yo gen parfe kòrèk. Men, kite m 'kouri Valgrind ak nan - Fuit radyasyon-chèk egal plen sou memwa. Epi, koulye a lè m 'kouri sa a - enteresan. Envalid ekri nan gwosè 4 nan liy 21 nan memory.c. Liy 21 nan memory.c se ki youn? Oh, enteresan. Men, tann. Size 4 an, sa sa refere li a? Mwen sèlman t 'yon sèl ekri, men li la nan gwosè 4. Poukisa li 4? Li nan paske li nan yon Int, ki se, ankò, kat bytes. Se konsa, Valgrind yo te jwenn yon ensèk se mwen menm, ensidan nan Kòd m 'yo, pa t'. E petèt TF ou ta oswa pa ta. Ki sa ki Men, Valgrind pou asire w te jwenn ke nou te fè yon erè a, menm si nou gen chans, ak òdinatè a deside, eh, mwen pa ale nan aksidan jis paske w manyen yon sèl multiple, yon sèl vo Int la nan memwa ke ou pa t ' aktyèlman pwòp. Oke, ki lòt bagay se buggy isit la. Adrès - sa a se yon adrès fou kap nan ekzadesimal. Sa jis vle di yon kote nan pil wòch la se zewo bytes apre yon blòk nan gwosè 40 se atribye ba. Kite m 'rale soti isit la ak wè si sa a se yon ti kras pi plis itil. Enteresan. 40 bytes yo definitivman pèdi nan dosye pèt 1 nan 1. Yon fwa ankò, pi plis mo pase se itil isit la. Men, ki baze sou liy ki make, kote mwen ta dwe pwobableman konsantre mwen atansyon pou yon lòt ensèk? Sanble yon liy 20 nan memory.c. Se konsa, si nou tounen nan liy 20, sa a, se la yon sèl ke ou idantifye pi bonè. Men, li pa nan nesesèman buggy. Men, nou te sa a ranvèse efè li yo. Se konsa, kouman mwen korije omwen youn nan moun ki erè? Kisa ki ta kapab pou m fè apre liy 21? Mwen te kapab fè gratis nan x, se konsa bay tounen ke memwa. Men, ki jan mwen ranje sa a ensèk? Mwen ta dwe definitivman ale pa gen okenn pi lwen pase 0. Se konsa, kite m 'a eseye, ak re-kouri sa a. Padon, definitivman ale pa gen okenn pi lwen pase 9. Fè memwa. Kite m 'relance Valgrind nan yon lòt fenèt pi gran. Epi, koulye a gade. Nice. Tout blòk pil wòch yo te libere. Pa gen fwit yo posib. Men, moute pi wo a isit la, gen nan pa gen mansyone nenpòt ki plis nan dwa valab. Jis jwenn visye, ak nan kite wè si yon lòt demonstrasyon pa ale kòm gen entansyon - Mwen t 'jwenn chans yon moman de sa. Men, lefèt ke sa a se 0 se petèt san nesesite erè ladann. Se pou yo jis fè 50, yon abitrè yon ti jan nimewo, fè memwa dot koupe memwa - toujou jwenn chans. Pa gen anyen nan kolizyon. Sipoze mwen jis fè yon bagay reyèlman tèt chaje, mwen fè 100. Kite m 'renouvèlman memwa, dot koupe memwa - gen chans ankò. Kouman sou 1,000? antye pi lwen pase, apeprè, kote mwen ta dwe? Fè memwa - modi li. [Ri] OK. Se pou yo pa dezòd alantou ankò. Relance memwa. Gen nou ale. Tout dwa. Se konsa, aparamman ou endèks 100,000 antye pi lwen pase kote ou ta dwe te nan memwa, move bagay rive. Se konsa, sa a se evidamman pa yon difisil, vit règ. Mwen te kalite lè l sèvi avèk jijman ak erè yo ka resevwa gen. Men, sa a se paske, depi lontan istwa kout, se memwa òdinatè w lan an tou divize nan bagay sa yo rele segments. Epi pafwa, òdinatè a aktyèlman te ban nou yon ti kras plis memwa pase ou mande pou ou. Men, pou efikasite, li nan jis pi fasil jwenn plis memwa men se sèlman di ou ke w ap resevwa yon pòsyon nan li. Men, si ou jwenn chans pafwa, Se poutèt sa, ou ta ka kapab manyen memwa ki pa fè pati ou. Ou gen okenn garanti ke sa ki valè ou mete ladan l 'ap rete la, paske òdinatè a toujou panse li pa ou, men li pa la nesesèman pral frape yon lòt segman nan memwa nan la òdinatè ak pwovoke yon erè tankou yon sèl sa a isit la. Tout dwa. Nenpòt kesyon Lè sa a, sou memwa? Tout dwa. Ann pran yon gade isit la, lè sa a, nan yon bagay nou ve yo te pran pou akòde pou kèk tan, ki se nan sa a ranpli rele cs50.h. Se konsa, sa a se yon dosye. Sa yo se sèlman yon pakèt tout nan kòmantè moute tèt. Epi ou ka gen gade sa a si ou poked alantou sou aparèy la. Men, li sanble ke tout tan tout tan an, lè nou itilize yo itilize fisèl kòm yon synonym, vle di la pa ki nou te deklare ki synonym te la avèk sa a mo kle tipedèf, pou definisyon kalite. Men, nou ap esansyèlman li di yo: fè fisèl yon synonym pou zetwal Char. Sa vle di yo pa ki chemine a kreye sa yo wou fòmasyon li te ye kòm fisèl la. Koulye a isit la a, se jis yon pwototip pou getchar. Nou te ka wè l 'devan, men sa a tout bon ki sa li fè. getchar pran pa gen agiman, retounen yon Char. getdouble pran pa gen agiman, retounen yon doub. getfloat pran pa gen agiman, retounen yon flote, ak pou fè. getint se nan isit la. getlonglong se nan isit la. Men, getstring se nan isit la. Epi sa a, li. Liy sa a koulè wouj violèt se yon lòt preproseseur direktiv paske yo te nan hashtag nan konmansman an nan li. Tout dwa. Se konsa, kounye a kite m 'ale nan cs50.c. Epi nou pa pral pale twò lontan sou sa. Men, yo ba ou yon aperçu nan sa ki nan te ale sou tout bagay sa a tan sa a, kite m 'ale nan - kite a fè getchar. Se konsa, getchar se sitou kòmantè. Men, li sanble tankou sa a. Se konsa, sa a se fonksyon aktyèl la getchar ke nou ve yo te pran pou aki egziste. Men, menm si nou pa gen itilize yon sèl sa a ki souvan, si tout tan tout tan, li la omwen relativman senp. Se konsa, li la vo pran yon rapid gade nan isit la. Se konsa, getchar gen yon bouk enfini, fè espre pou aparamman. Li Lè sa a, rele - e sa se kalite yon bèl sèvi ak yo ankò nan kòd Nou menm nou te ekri. Li rele getstring. Paske sa ki fè li vle di yo ka resevwa yon Char? Oke, ou ta ka kòm byen eseye jwenn yon tout liy nan tèks la ki soti nan itilizatè a ak Lè sa a, jis gade nan yon sèl nan tout sa yo karaktè. Nan liy 60, isit la nan yon ti kras ti jan nan yon chèk saniti. Si getstring tounen nil, kite a pa kontinye. Yon bagay te ale mal. Koulye a, sa a se yon ti jan anmèdan men konvansyonèl nan C. max Char pwobableman reprezante sa jis ki baze sou non li? Li se yon konstan. Se tankou valè a nimerik nan la pi gwo Char ou ka reprezante ak yon sèl mòde, ki se pwobableman nimewo a 255, ki se nimewo nan pi gwo ou reprezante uit Bits, kòmanse nan zewo. Se konsa, mwen te sèvi ak sa a, nan fonksyon sa a, lè ekri sa a kòd, sèlman paske si gen yon bagay ale mal nan getchar men objektif li nan lavi a se retounen yon Char, ou bezwen yon jan kanmenm kapab yo fè siyal itilizatè a ki yon bagay ale mal. Nou pa ka retounen nil. Li sanble ke nil se yon konsèy. Li di ankò: getchar gen retounen yon Char. Se konsa, konvansyon an, si gen yon bagay ale sa ki mal, se ou menm, pwogramè a, oswa nan ka sa a, m 'ak bibliyotèk la, mwen te gen yon jis deside abitrèman, si yon bagay ale mal, mwen pral retounen nimewo a 255, ki se vre wi: vle di nou pa kapab, itilizatè a kapab pa tape pèsonaj la reprezante pa la nimewo 255 paske nou te gen yon vòlè li kòm yon valè Sentinel sa yo rele reprezante yon pwoblèm. Koulye a, li sanble ke pèsonaj la 255 se pa yon bagay ou ka tape sou klavye ou, se konsa li gen okenn kontra gwo. Itilizatè a pa remake ke Mwen te yo vòlè li sa a karaktè. Men, si ou janm wè nan paj nonm sou yon sistèm òdinatè kèk referans a yon tout bouchon konstan tankou sa a ki di, nan ka nan erè sa a ta ka konstan dwe retounen, ki nan tout kèk moun te fè ane de sa te abitrèman deside retounen sa a valè espesyal ak rele li yon konstan nan ka yon bagay ale mal. Koulye a, majik la k ap pase desann isit la. Premyèman, m ap deklare nan liy 67 de karaktè, C1 ak C2. Lè sa a, nan liy 68, gen nan aktyèlman yon liy nan Kòd sa a, se okoumansman de zanmi nou an printf, bay sa li gen CS pousan nan quotes. Men, remake sa kap pase isit la. sskanf vle di eskanè fisèl - vle di eskane yon formate fisèl, sskanf èrgo. Kisa sa vle di? Sa vle di ou pase nan sskanf yon kòd. Men, liy la se tou sa itilizatè ki kalite pous Ou pase nan sskanf yon kòd fòma tankou sa a ki di skanf ki sa yo ou espere te itilizatè a tape pous Ou Lè sa a, pase-nan adrès yo nan de fragman nan memwa, nan ka sa a, paske mwen gen de placeholders. Se konsa, mwen pral bay li adrès la nan C1 ak adrès la nan C2. Men, sonje ke ou bay la yon fonksyon adrès nan kèk varyab, sa ki nan enplikasyon a? Ki sa ki ka ki fonksyon fè kòm yon konsekans nan bay li adrès la nan yon varyab, kòm opoze a varyab nan tèt li? Li ka chanje li, dwa? Si ou te gen yon moun yon kat jeyografik nan yon fizik adrès, yo ka ale la epi fè tou sa yo vle lè sa adrès. Menm lide isit la. Si nou pase nan sskanf, adrès la nan de fragman nan memwa, menm sa yo ti fragman ti kras nan memwa C1, ak C2, men nou di li adrès la nan yo, sskanf kapab chanje li. Se konsa, objektif sskanf a nan lavi yo, si nou li paj la moun, se yo li sa a itilizatè tape nan, espwa pou itilizatè a gen tape nan yon karaktè e petèt yon lòt karaktè, ak tou sa itilizatè a tape, pèsonaj la premye ale isit la, pèsonaj la dezyèm ale isit la. Koulye a, kòm yon sou kote, sa a, epi ou ta konnen sèlman sa a soti nan dokiman an, lefèt ke mwen mete yon espas vid gen jis vle di ke mwen pa pran swen si itilizatè a frape bar nan espas yon kèk fwa devan lotèl li oswa li te pran yon karaktè, mwen pral inyore nenpòt ki espas blan. Se konsa, ki, mwen konnen ki soti nan lòt dokiman an. Lefèt ke gen yon c% dezyèm ki te swiv pa espas blan se aktyèlman ekspre. Mwen vle pou kapab detekte si itilizatè a vise monte oswa pa t 'kolabore. Se konsa, mwen espere ke itilizatè a sèlman tape nan yon sèl karaktè, Se poutèt sa mwen espere ki sskanf se sèlman pral retounen nan valè 1 paske, ankò, si mwen li dokiman an, bi sskanf a nan lavi a se pou li retounen nan nimewo a nan varyab ki te plen ak konsèy itilizatè. Mwen te pase nan de varyab adrès, C1 ak C2. Mwen espere, menm si, ke se sèlman youn nan yo vin touye paske si sskanf retounen 2, sa ki nan prezimableman enplikasyon la lojikman? Sa itilizatè a pa t 'jis ban m' yon sèl N. tankou mwen te di l 'oswa li. Yo pwobableman tape nan omwen de karaktè. Se konsa, si mwen olye pa t 'gen dezyèm lan C%, mwen jis te gen yon sèl, ki franchman ta gen plis entwisyon apwòch, mwen panse ke yon premye gade, ou pa pwal pou kapab detekte si itilizatè a te ban nou plis D 'pase ou aktyèlman te vle. Se konsa, sa a se yon fòm enplisit nan kont kouran erè. Men, remake sa mwen fè isit la. Yon fwa mwen se asire w ke itilizatè a te ban m 'yon sèl karaktè, mwen libere liy lan, ap fè opoze a nan getstring, ki an vire sèvi ak malok, ak Lè sa a, m'a tounen C1, pèsonaj la ke mwen te espere a itilizatè yo bay epi sèlman bay yo. Se konsa, yon rapid yon apèsi sèlman, men nenpòt kesyon sou getchar? Nou pral tounen vin jwenn kèk nan lòt moun yo. Oke, kite m 'ale pi devan epi fè sa - ta kwè kounye a, jis motive nou diskisyon nan yon semèn plis tan, sa a se yon dosye rele structs.h. Li di ankò, sa a se jis yon gou nan yon bagay ki bay manti devan. Men, avi ke anpil nan sa a se kòmantè. Se konsa, kite m 'mete aksan sou sèlman nan enteresan pati pou kounye a. tipedèf - gen nan ke mo kle menm ankò. tipedèf nou itilize deklare fisèl kòm yon espesyal kalite done. Ou kapab sèvi ak tipedèf yo kreye nouvo mak done kalite ki pa t egziste lè C te envante. Pou egzanp, Int vini ak C. Char vini ak C. doub vini ak C. Men, gen nan pa gen nosyon yon elèv. Men, li ta trè itil yo dwe kapab ekri yon pwogram ki magazen nan yon varyab, nimewo ID elèv-la, Non yo, epi yo kay yo. Nan lòt mo, twa moso done, renmen yon Int ak yon fisèl ak fisèl yon lòt. Avèk tipedèf, ki sa ki trè pwisan sou sa a ak sturct nan mo kle pou estrikti, ou menm, pwogramè a nan 2013, ka aktyèlman defini nan pwòp ou a done kalite ki pa t egziste ane de sa men sa kostim rezon ou a. Se konsa, isit la, nan liy 13 a 19, nou ap deklare yon kalite done nouvo, tankou yon Int, men rele li elèv yo. Ak andedan sa a varyab ki pral gen twa bagay sa yo - yon Int, yon kòd, ak yon kòd. Se konsa, ou ka panse a sa ki nan vrèman rive isit la, menm si sa a se yon ti jan nan yon senplifikasyon pou jodi a, yon elèv ap esansyèlman pral gade tankou sa a. Li pral gen yon ti moso nan memwa ak yon ID, yon non jaden, ak yon jaden kay la. Epitou, n ap kapab sèvi ak sa yo fragman nan memwa ak jwenn aksè nan yo jan sa a. Si m 'ale nan struct0.c, isit la se yon relativman long, men apre yon modèl, nan kòd ki sèvi ak sa a jwe fent nouvo. Se konsa, premye, kite m 'trase atansyon ou pati pyès sa yo enteresan moute tèt. Sharp defini elèv yo 3, deklare yon konstan rele elèv yo li ak mandatè li abitrèman nimewo a 3, jis Se konsa, mwen gen twa elèv yo lè l sèvi avèk pwogram sa a pou kounye a. Isit la vini Main. Men, avi, jan mwen deklare yon etalaj de elèv yo? Bon, mwen jis itilize sentaks la menm. Elèv la mo se evidamman nouvo. Men, elèv, klas, bracket elèv yo. Se konsa, malerezman, gen nan yon anpil nan sèvi ak yo ankò nan tèm isit la. Sa a se jis yon nimewo. Se konsa, sa a se tankou li di twa. Gwoup se jis sa m 'vle yo rele varyab la. Mwen te kapab rele li elèv yo. Men, klas, sa a se pa yon klas nan yon objè oryante Java kalite fason. Se jis nan yon klas elèv yo. Ak done ki kalite chak eleman nan ki etalaj se elèv yo. Se konsa, sa a se yon ti kras diferan ak nan li di yon bagay tankou sa a, li nan jis - M ap di, ban m 'twa elèv epi rele ki klas etalaj. Tout dwa. Koulye a, isit la nan yon bouk kat. Abitye sa a nèg a - répétèr soti nan zewo sou jiska twa. Men, isit la nan moso nan nouvo nan sentaks. Pwogram lan pral pouse m ', moun la, bay li yon elèv ID, ki se yon Int. Men, isit la nan sentaks la ak ki ou kapab magazen yon bagay nan jaden an ID a kote klas bracket I. Se konsa, sa a sentaks se pa nouvo. Sa a jis vle di, ban m 'wityèm lan elèv nan klas la. Men, sa a senbòl se nouvo. Moute jouk koulye a, nou te pa kapab itilize dot, omwen nan Kòd tankou sa a. Sa vle di ale nan struct la li te ye kòm yon elèv, li mete yon bagay la. Menm jan an tou, nan liy sa a kap vini an, 31, ale pi devan epi mete tou sa itilizatè a kalite pou yon Non isit la ak sa yo fè pou yon kay, menm bagay la, ale pi devan epi mete l 'nan. kay la. Se konsa, sa fè pwogram sa a finalman fè? Ou ka wè yon kol ti kras la. Kite m 'ale pi devan epi fè strukt 0 dot koupe struct 0, ID elèv la 1, di David Mather, elèv ID 2. Rob Kirkland, elèv ID 3. Lauren Leverit - ak bagay la sèlman pwogram sa a te fè, ki se jis konplètman abitrè, se Mwen te vle fè yon bagay ak done sa yo, kounye a ke mwen te anseye nou ki jan yo sèvi ak strukt, se mwen jis te gen sa a bouk siplemantè isit la. Mwen répétèr sou etalaj la nan elèv yo. Mwen itilize, nou zanmi petèt kounye a yo konnen yo, fisèl konpare, stircomp chèk la se kay 8yèm elèv la egal a Mather? Men, si se konsa, jis ekri ak lèt ​​detache yon bagay abitrèman renmen, repons lan se wi, li se. Men, ankò, jis bay m 'opòtinite itilize ak jam itilize ak jam itilize sa a notasyon dot nouvo. Se konsa, ki sousye, dwa? Vini ak yon pwogram elèv la se yon ti jan abitrè, men li vire soti ke nou kapab fè bagay sa yo itil ak sa a, pou egzanp jan sa a. Sa a se yon struct pi plis konplike nan C. Li nan te resevwa yon douzèn oswa jaden plis, yon ti jan cryptically yo te rele. Men, si ou te janm tande pale de yon grafik fòma dosye rele bitmap, BMP, li sanble ke fòma a dosye bitmap bèl anpil sanble ke sa a. Li se yon sòt ti kras Smiley figi. Li se yon imaj ti ke mwen te agrandi nan sou bèl gwo pou m 'te kapab wè chak nan pwen yo moun oswa piksèl. Koulye a, li vire soti nou ka reprezante yon nwa dot ak, di, nimewo a 0. Men, yon dot blan ak nimewo a 1. Se konsa, nan lòt mo, si ou vle trase yon Smiley fè fas ak delivre sa imaj nan yon òdinatè, li sifizan nan magazen zewo ak moun ki gade tankou sa a, ki kote, ankò, yo menm yo se blan ak zewo yo nwa. Men, ansanm, si ou efektivman gen yon mare sentiwon nan yo menm ak zewo, ou gen yon kadriyaj nan piksèl, epi si ou mete yo soti, ou gen yon bèl ti Smiley figi. Koulye a, fòma bitmap ranpli, BMP, se efektivman ki anba kapo a, men ki gen plis piksèl sot ke ou ka aktyèlman reprezante koulè. Men, lè ou gen pi plis sofistike dosye fòma tankou BMP ak JPEG ak GIF ak ou ka yo konnen yo, moun ki dosye sou ki gen kapasite tipikman pa sèlman gen zewo ak moun yo pou piksèl yo, men yo gen kèk Metadata kòm byen - meta nan sans ke se pa reyèlman done men li la itil nan genyen. Se konsa, sa yo jaden yo isit la qui, ak nou pral wè sa a nan plis detay nan P mete- 5, ke anvan zewo yo ak moun yo ki reprezante piksèl yo nan yon imaj, gen yon pakèt moun sou Metadata tankou gwosè a nan imaj la ak lajè nan imaj la. Ak Avi mwen arrache nan kèk bagay sa yo abitrè isit la - lajè ak wotè. Konte ti jan ak kèk lòt bagay. Se konsa, gen nan kèk Metadata nan yon dosye. Men, pa konprann ki jan dosye yo mete soti nan fason sa a, ou kapab aktyèlman Lè sa a, manipile imaj, refè imaj soti nan ki gen kapasite, rdimansyonman imaj. Men, ou kapab pa nesesèman amelyore yo. Mwen te bezwen yon foto. Se konsa, mwen tounen al jwenn RJ isit la, ki moun ki ou te wè sou ekran an byen kèk tan de sa. Men, si mwen louvri moute éliminer isit la, sa a se sa k ap pase si ou eseye rale nan ak amelyore RJ. Li pa la ap resevwa nenpòt ki pi bon vrèman. Koulye a, éliminer se kalite flou li yon ti kras ti jan, jis enteprete sou la reyalite ki RJ pa jwenn patikilyèman ranfòse lè ou rale pous Men, si fè li fason sa a, wè kare yo? Yeah, ou kapab definitivman wè kare yo sou yon pwojektè. Sa a ki sa ou jwenn lè ou amelyore. Men, nan konpreyansyon ki jan nou RJ la oswa Se Smiley figi aplike pral fè nou aktyèlman ekri kòd ki manipul bagay sa yo. Apre sa, mwen te panse mwen ta fini sou nòt sa a, ak 55 segonn nan yon amelyore sa a, se, Mwen bay gabèl, di olye erè ladann. [Lèktur videyo] -Li te bay manti. Sou sa ki, mwen pa konnen. -Se konsa, sa nou konnen? -Sa a 9:15 Ray Santoya te nan ATM lan. -Se konsa, kesyon an se sa ki te li fè nan 9:16? -Fiziyad milimèt nan nèf nan yon bagay. Petèt li te wè tirè pwofesyonèl la. -Oswa te ap travay avè l '. -Rete tann. Tounen yon sèl. -Kisa ou wè? -Pote figi l 'leve, plen ekran. -Li linèt. -Gen yon refleksyon. -Sa a ekip la bezbòl Neuvitas. Sa a logo yo. -Apre sa, li la pale ak moun ki nan mete ke levit. [Lèktur videyo END] DAVID J. Malan: Sa a pral dwe mete Pwoblèm 5. Nou pral wè ou an semèn pwochèn. MALE Oratè: Nan CS50 nan pwochen an. [Krikèt chan] [Jwe mizik]