ROB BOWDEN: Sveiki, aš Rob Bowden, ir pakalbėkime apie quiz0. Taigi, pirmas klausimas. Tai klausimas, kur jums reikia koduoti skaičių 127 dvejetainių lempučių. Jei nori, tu gali daryti reguliariai konversija iš bi-- arba iš dešimtosios į dvejetainiai. Bet tai tikriausiai bus imtis daug laiko. Aš turiu galvoje, jūs galite suprasti, kad, Gerai, 1 yra ten, 2 yra ten, 4 yra ten, 8 yra ten. Paprastesnis būdas, 127 yra 128 minus vienas. Kad kairiausias lemputė yra 128 bitų. Taigi 127 yra tikrai tik visi kitų lempučių, nes tai kairiausias lemputė minus 1. Štai ir viskas tuo klausimu. Klausimas vienas. Taigi su 3 bitų galite atstovauti 8 skirtingas reikšmes. Kodėl, tuomet, yra 7 Didžiausias nieujemna Dešimtainis sveikasis galite atstovauti? Na, jei mes galime tik atstovauti 8 skirtingas reikšmes, tada tai, ką mes ketiname būti atstovaujantis yra 0 per 7. 0 užima vieną iš vertybes. Klausimas. Su n bitus, kiek skiriasi vertybės gali atstovaujate? Taigi, su n bitus, turite 2 galimos reikšmės kiekvienam tiek. Taigi, mes turime 2 galimi dydžiai Pirmoji bit, 2 Galimos reikšmės už antrą, 2 įmanoma trečdaliu. Ir todėl tai 2 kartus 2 kartus 2 ir galiausiai atsakymas yra nuo 2 iki n. Klausimas trys. Kas 0x50 susidedančiame iš dviejų? Taigi nepamirškite, kad šešioliktainėje turi labai paprastas konvertavimo į dvejetainę. Taigi čia mes tiesiog reikia ieškoti 5 ir 0 nepriklausomai. Taigi, kas yra 5 susidedančiame iš dviejų? 0101, tai 1 bit ir 4 bit. Kas 0 susidedančiame iš dviejų? Ne sudėtinga. 0000. Taigi tiesiog sudėti juos kartu, ir tai pilnas skaičius dvejetainę. 01.010.000. Ir jei jūs norėjo galėtumėte kilimo, kad kairiausias nulio. Tai neturi jokios reikšmės. Taigi alternatyviai, kas 0x50 dešimtainiais? Jei nori, tu could-- jei esate patogiau su binary, galite imtis, kad dvejetainį atsakymą ir konvertuoti, kad į dešimtosios. Ar mes galime tiesiog prisiminti kad šešioliktainėje. Kad 0 yra 0-ąją vietą, o 5 yra 16 į pirmąją vietą. Taigi čia mes turime 5 kartus 16 iki pirma, plius 0 kartų 16 iki nulio, yra 80. Ir jei jūs pažvelgė pavadinimas su klausimu, ji buvo CS 80, kuris buvo natūra užuomina į atsakymas į šią problemą. Penktuoju klausimu. Mes turime šį Scratch scenarijų, kuris yra kartoti 4 kartus žemės riešutų sviestas želė. Taigi, kaip mes dabar kodas, C? Na, mes turime here-- pusiau šriftu dalis yra tik dalis jums buvo įgyvendinti. Taigi, mes turime 4 kilpos, kad ciklais 4 kartų, printf-mas žemės riešutų sviestas želė, su naujos linijos kaip problema prašo. Šešių klausimas, kitas Scratch problema. Mes matome, kad esame amžinai kilpa. Mes sakydamas kintamojo i ir tada incrementing i 1. Dabar mes norime padaryti, kad C yra keletas būdų mes galime tai padarė. Čia mes atsitiko kodą amžinai kilpa kaip while (true). Taigi, mes deklaruoti kintamojo i, tiesiog kaip mes turėjo kintama I nulio. Pripažinti kintamasis i ir amžinai while (true), mes sakome, kad kintamasis i. Taigi printf% i-- ar galima jį naudojo% d. Mes sakome, kad kintamasis ir tada didinkite ją, i ++. Klausimas septyni. Dabar mes norime padaryti kažką labai panašaus Mario dot c iš problemos nustatyti vieną. Norime atspausdinti ðiuos žymas su grotelėmis, norime spausdinti penkių trys stačiakampio šių masyvuose. Taigi, kaip mes ketiname daryti? Na, mes jums visas krūva kodas, ir jūs tiesiog turi užpildyti spausdinimo tinklo funkcija. Taigi, ką PrintGrid atrodo? Na jūs praeityje plotis ir aukštis. Taigi, mes turime išorinėje 4 kilpa, kad manimi kilpų per visas šio eilių tinklelis, kad mes norime spausdinti. Tada mes turime tarp įdėtos 4 kilpos, tai spausdinimas ant kiekvieno stulpelio. Taigi kiekvienoje eilutėje, mes spausdinti už kiekviename stulpelyje, vieną maiša. Tada ties eilutės pabaigoje mes spausdinti vieną naują liniją eiti į kitą eilutę. Ir tai, tai ir visą tinklą. Klausimas aštuoni. Kaip PrintGrid funkcija yra sakoma turėti šalutinį poveikį, bet ne grąžą vertė. Paaiškinkite skirtumą. Taigi tai priklauso nuo Jums prisiminti kas šalutinis poveikis yra. Na, grįžimas value-- mes žinome PrintGrid nėra turėti grąžos vertę, nes Štai čia rašoma, negalioja. Taigi viskas, kas grįš tuštuma tikrai ne grįžti nieko. Taigi, kas yra šalutinis poveikis? Na, šalutinis poveikis yra nieko, kad tarsi išlieka po funkcinių galais kad buvo ne tik grįžo, ir tai buvo ne tik nuo įnašo. Taigi, pavyzdžiui, mes galime pakeisti pasaulinį kintamąjį. Kad būtų šalutinis poveikis. Šiuo konkrečiu atveju, Labai svarbu šalutinis poveikis spausdinant ekrane. Taigi, kad yra šalutinis poveikis kad PrintGrid turi. Mes spausdinti šiuos dalykus ekrane. Ir jūs galite galvoti kad kaip šalutinis poveikis, kadangi, kad kažkas, kad neišnyksta ši funkcija baigiasi. Tai kažkas ne apimties Šios funkcijos, kurios galiausiai yra keičiama, turinys ekrane. Klausimas devyni. Apsvarstykite programą žemiau, į kurią eilučių numerius buvo pridėta Diskutuojant. Taigi šioje programoje mes tik paskambinę GetString, ją saugoti į šį kintamąjį rodiklį s, o tada spausdinti šį kintamąjį s. Gerai. Taigi, kodėl linija vienas yra. #include CS50 dot h. Kodėl mes turime #include CS50 dot h? Na mes skambina GetString funkciją, ir GetString apibrėžiama į CS50 bibliotekoje. Taigi, jei mes neturėjome #include CS50 dot h, gautume, kad numanomas deklaraciją iš GetString funkcija klaida nuo kompiliatoriaus. Taigi, mes turime įtraukti library-- mes turime įtraukti header failą, kitaip kompiliatorius nebus pripažįsta, kad GetString egzistuoja. Paaiškinkite, kodėl linija du yra. Taigi standartas io dot h. Tai lygiai tas pats kaip ankstesniais problemos, išskyrus Užuot užsiėmusi GetString, mes kalbame apie printf. Taigi, jei mes ne pasakyti, kad mes turime įtraukti standartinę io dot h, tuomet mes negalėsime naudoti printf funkcija, nes kompiliatorius nežino apie tai. Why-- kas yra reikšmė Negaliojančių keturių linijos? Taigi čia mes turime int main (void). Tai tik pasakyti, jog negaunate jokio komandų eilutę argumentai pagrindinis. Atminkite, kad galėtume pasakyti int Pagrindiniai int argc styginių argv skliausteliuose. Taigi čia mes tiesiog pasakyti negaliojančiu pasakyti mes ignoruoja komandinės eilutės argumentai. Paaiškinti, dėl atminties, tiksliai kas GetString atitinka šešis grįžta. GetString grįžta iš bloko atmintis, simbolių masyvas. Tai tikrai grįžta rodyklę į pirmąją pobūdžio. Atminkite, kad eilutė yra char žvaigždė. Taigi s yra rodyklė į pirmąjį personažas kokia eilutė yra kad vartotojo įrašytas klaviatūra. Ir kad atminties atsitinka būti malloced, taip, kad atmintis yra krūvą. Klausimas 13. Apsvarstykite žemiau programą. Taigi visa tai programa daro yra printf-mas 1, padalinta iš 10. Taigi, kai rengiama ir vykdoma ši programa išėjimai 0,0, nors 1 padalytą 10 yra 0,1. Tad kodėl jis 0,0 yra? Na, tai yra dėl to, integer padalinys. Taigi yra 1 sveikasis skaičius, 10 yra sveikasis skaičius. Taigi 1 padalytą 10, viskas traktuojamas kaip sveikieji, ir C, kai mes darome sveikasis padalinys, mes trumpinti jokio kablelio. Taigi 1 padalytą 10 yra 0, tada mes bandome spausdinti, kad plūdės, todėl nulis spausdinama kaip plūdė 0,0. Ir štai kodėl mes gauname 0,0. Apsvarstykite žemiau programą. Dabar mes spausdinti 0,1. Taigi ne sveikasis skaičius pasidalijimas, mes tik spausdinant 0,1, bet mes jos spausdinimas iki 28 skaičių po kablelio. Ir mes gauname tai 0,1000, visa krūva nulio, 5 5 5, blah blah blah. Taigi kyla klausimas, kodėl ji daro spausdinti, kad vietoj lygiai 0,1? Taigi priežastis čia dabar slankiojo kablelio netikslumų. Atminkite, kad plūdė yra vos 32 bitai. Taigi, mes galime tik atstovauti baigtinio skaičiaus iš slankiojo kablelio vertybes tose 32 bitai. Na ten galiausiai galo daug kableliu vertybės, ir ten be galo daug plūduriuojančius taško verčių, esantys tarp 0 ir 1, ir mes akivaizdžiai galėjo atstovauti dar daugiau vertės, nei nurodyta. Taigi, mes turime aukotis, kad gebėti atstovauti dauguma vertybes. Taigi vertė kaip 0,1, matyt mes negalime atstovauti kad tiksliai. Taigi vietoj atstovaujanti 0,1 darome Geriausia, ką galime atstovauti šiam 0.100000 5 5 5. Ir tai gana arti, bet už daug paraiškų Jūs neturite jaudintis slankiojo kablelio netikslumo, nes mes tiesiog negali atstovauti Visos slankiojo taškų tiksliai. 15 klausimas. Apsvarstykite šį kodą. Mes tiesiog spausdinti 1 plius 1. Taigi nėra triukas čia. 1 plius 1 vertinamas kaip 2, ir tada mes spausdinti, kad. Tai tiesiog spausdina 2. 16 klausimas. Dabar mes spausdinti pobūdžio 1 plius simbolis 1. Tad kodėl tai daro ne spausdinti tą patį? Na charakteris 1 plius simbolis 1, simbolis 1 yra ASCII vertės 49. Taigi tai tikrai sako: 49 plius 49 ir galiausiai tai vyksta spausdinti 98. Taigi tai nespausdina 2. 17 klausimas. Užpildykite įgyvendinimą iš žemiau nelyginis tokiu būdu kad funkcija grąžina true, jei n yra nelyginis, ir false, jei n yra net. Tai puikus tikslas už mod operatorius. Taigi, mes atsižvelgti į mūsų argumentas n, jei n mod 2 yra lygus 1, ir tai reiškia, kad n, padalytą iki 2 turėjo dalį. Jei n padalytą 2 turėjo likusią, kad reiškia, kad n yra nelyginis, tad mes grąžina true. Kitaip mes grįžti klaidinga. Jūs taip pat galėjo padaryti n mod 2 kaip lygių nulis, return false, else return true. Apsvarstykite rekursinį funkciją žemiau. Taigi, jei n yra mažesnis arba lygus 1, grąžina 1, else return n kartų f n minus 1. Taigi, kas yra ši funkcija? Na, tai tik faktorinė funkcija. Tai gražiai atstovavo kaip n faktorialas. Taigi klausimas 19 Dabar mes norime pasinaudoti šia rekursinį funkciją. Mes norime, kad jis kartojamas. Taigi, kaip mes tai darome? Na už darbuotojų sprendimas, ir vėl ten keli būdai kaip galėjo padaryti kad mes pradėti su šiuo int produkto lygus 1. Ir per šį for ciklas, mes ketiname dauginant produktą turi būti galiausiai baigti su visiškai faktorialas. Taigi int i lygu 2, i mažiau nei arba lygus n, i ++. Jums gali būti įdomu, kodėl aš lygus 2. Na, prisimenu, kad čia turime įsitikinkite mūsų bazinį scenarijų yra teisinga. Taigi, jei n yra mažesnis arba lygus 1, mes tiesiog grįžti 1. Taigi per čia, mes pradėti i lygu 2. Na, jei aš buvo 1, tada the-- arba jei n buvo 1, tada už kilpa nebūtų įvykdyti ne visi. Ir taip mes tiesiog grąžinimas produktas, kuris yra 1. Panašiai, jei n buvo nieko mažiau nei 1-- jei ji buvo 0, neigiamas 1, whatever-- mes norime dar grįš 1, kuri yra būtent tai, ką pakartotinė versija daro. Dabar, jei n yra didesnis nei 1, tada mes ketiname padaryti bent vieną iteracijos šios kilpos. Taigi galime sakyti, n yra 5, o po to mes darysiu produktų kartus lygus 2. Taigi, dabar produktas yra 2. Dabar mes ketiname daryti Produktų kartų lygus 3. Dabar atėjo 6. Prekės laikai yra lygus 4, o dabar tai 24. Prekės laikai yra lygus 5, dabar tai 120. Taigi galiausiai, mes grįžti 120, kuris yra teisingai 5 faktorialas. 20 klausimas. Tai vienas, kur jūs turite užpildyti šios lentelės bet kuriuo algoritmas, nieko, kad mes matėme, kad tinka šias algoritminį paleisti kartų šių Asimptotinio veikimo laikai. Taigi, kas yra algoritmas, kuris yra omega 1, bet didelis O n? Taigi gali būti be galo daug atsakymų čia. Vienas, kad mes matėme turbūt dažnai yra tik tiesinis paieška. Taigi geriausiu atveju scenarijus, punktas mes ieško yra pradedant sąrašo ir todėl omega nuo 1 žingsnių, Pirmas dalykas, mes patikrinti, mes tiesiog iš karto grįžti kad mes radome elementą. Blogiausiu atveju, elementas yra pabaigos arba prekės nėra sąraše ne visiems. Taigi, mes turime ieškoti Visas sąrašas, visa n elementai, ir tai, kodėl ji o n. Taigi, dabar tai kažkas tai tiek omega n log n, ir didelis O n log n. Na aktualiausia dalykas mes matėme čia yra sujungti rūšiuoti. Taigi sujungti rūšiuoti, atminkite, galiausiai teta n log n, kur teta apibrėžta jei abi omega ir didelis O yra tokie patys. Tiek n log n. Kas ką tai omega n ir O, n kvadrato? Na, vėl ten keli galimi atsakymai. Čia mes atsitikti pasakyti burbulas rūšiuoti. Insertion sort taip pat dirba čia. Atminkite, kad burbulas rūšiuoti turi tą optimizavimą, kai, jei yra galimybė gauti per visą sąrašą nereikia daryti bet apsikeitimo, tada, gerai, mes galime iš karto grįžti, kad sąrašas buvo rūšiuojami prasideda. Taigi, geriausiu atveju, tai tik omega n. Jei tai ne tik gražiai rūšiuoti sąrašą Norėdami pradėti su, tada mes turime O n kvadrato apsikeitimo sandoriais. Ir pagaliau, mes turime pasirinkimo rūšiuoti už n kvadratu, omega ir didelis O. Klausimas 21. Kas integer overflow? Na vėl, panašiai kaip ir anksčiau, turime tik žinoma daug bitai atstovauti sveikasis skaičius, tai gal 32 bitai. Tarkime turime integer. Tada galiausiai aukščiausia teigiamas skaičius galime atstovauti yra nuo 2 iki 31 minus 1. Taigi, kas atsitinka, kai mes bandome tada didinkite tą sveikuosius? Na, mes ketiname eiti nuo 2 iki 31 minus 1, visą kelią žemyn į neigiamą 2 į 31. Taigi tai sveikas perpildymas kai jūs nuolat incrementing, ir galiausiai galite ne gauti bet didesnis ir ji tiesiog apsiaustas visą kelią atgal aplink neigiamą vertę. Ką apie buferio? Taigi buferis overflow-- prisiminti, kas buferio. Tai tiesiog iš atminties riekė. Kažkas panašaus masyvo yra buferis. Taigi buferio yra, kai bandysite prisijungti prie atminties už tos masyvo pabaigos. Taigi, jei turite masyvas dydžio 5 ir jus pabandykite naudoti masyvo laikiklis 5 arba laikiklio 6 arba laikiklio 7, ar kas nors už pabaigos, ar net ką nors below-- masyvas laikiklis neigiamas 1-- visi iš jų yra buferio perpildymas. Jūs neliesti atmintį blogais keliais. Klausimas 23. Taigi šiame, turėsite įgyvendinti strlen. Ir mes jums pasakyti, kad jūs galite prisiimti s nebus nulis, todėl jūs neturite padaryti bet NULL patikrinimą. Ir yra daug būdų, galite tai padarė. Čia mes tiesiog paprasta. Mes pradedame prekystalio, n. n yra skaičiuoti, kiek simbolių yra. Taigi, mes pradėti 0, ir tada mes pakartoti per visą sąrašą. Ar s laikiklis 0 lygus null terminatorius charakteris? Įsiminti mes ieškome null terminatorius pobūdis nustatyti, kiek laiko mūsų eilutė. Kad ketina nutraukti bet kokia atitinkama eilutė. Taigi yra s laikiklis 0 lygūs į null terminatorius? Jei taip nėra, tada mes ketiname ieškoti -ų laikiklio 1, S laikiklio 2. Mes nuolat vyksta, kol mes rasti null terminatorius. Kai mes jį radote, tada n yra Bendras ilgis eilutę, ir mes galime tik grąžinti tai. Klausimas 24. Taigi tai yra vienas, kur jūs turite padaryti kompromisą. Taigi vienas dalykas yra geras viename taip, bet kokiu būdu tai blogai? Taigi čia, sujungti rūšiuoti linkęs greičiau nei burbulas rūšiuoti. Pasakęs that-- gerai, ten Yra galimi keli atsakymo čia. Bet pats svarbiausias yra tas, kad burbulas rūšiuoti yra omega n už rūšiuotas sąrašą. Atminkite, kad stalą mes tiesiog matė anksčiau. Taigi burbulas rūšiuoja omega n, geriausias scenarijus yra tai galėjo tik eiti per sąrašas kartą, nustatyti, hey tai dalykas jau rūšiuojami, ir grįžimas. Sujungti rūšiuoti, nesvarbu, kokia jūs, yra omega n log n. Taigi už rūšiuotas sąrašą burbulo rūšiuoti ketina būti greitesnis. Dabar ką apie susieta sąrašus? Taigi susietas sąrašas gali augti ir trauktis kad tilptų kuo daugiau elementų, kaip reikia. Pasakęs that-- taip paprastai tiesiogiai palyginti bus susijęs sąrašą su masyvo. Taigi, nors masyvai gali lengvai auga ir trauktis kad tilptų kuo daugiau elementų, kiek reikia, susijusi sąrašą palyginti su array-- AN masyvas turi laisvą prieigą. Galime indeksą į bet ypač masyvo elementą. Taigi susietai sąrašą, mes negalime tiesiog eikite į penktasis elementas, mes turime išanalizuoti nuo pradžių kol mes gauti į penktąjį elementą. Ir tų, kurie ketina neleisti mums daro kažką panašaus dvejetainis paieškos. Kalbėdamas dvejetainis paieškos, dvejetainis paieškos linkęs būti greičiau nei tiesinės paiešką. Pasakęs that-- taip, kad vienas iš galimų dalykas yra tai, kad jūs negalite padaryti dvejetainis ieškoti susijusių sąrašus, Jūs galite tai padaryti tik jį matricos. Bet turbūt svarbiausia, jūs negalite padaryti dvejetainius paiešką nuo masyvo kad nerūšiuojamos. Išankstiniai gali tekti rūšiuoti masyvas, ir tik tada gali jūs dvejetainis paieškos. Taigi, jei jūsų dalykas nėra Rūšiuota prasideda, tada linijinis paieška galima greičiau. Klausimas 27. Todėl mano, kad programa toliau, kuris bus į kitą skaidrę. Ir tai yra vienas, kur mes esame norės aiškiai nurodyti dėl įvairių kintamųjų reikšmės. Taigi pažvelkime, kad. Taigi išsirikiuoti vienas. Mes turime int x lygus 1. Tai vienintelis dalykas, kuris nutiko. Taigi eilutėje vieną, matome mūsų lentelė, kad y, a, b, ir yra visi tmp tamsios. Taigi, kas yra x? Na mes tiesiog nustatyti jį lygus 1. Ir tada linija du, gerai, mes matome, kad Y yra nustatytas į 2, ir lentelė yra jau užpildyta mums. Taigi x yra 1 ir y yra 2. Dabar, linija trys, mes dabar viduje apsikeitimo funkcija. Ką mes pereiname apsikeitimo? Mes vyko Ženklas X ir ampersand y B. Kai problema anksčiau pareiškė, kad x adresas yra 0x10, ir y yra 0x14 adresas. Taigi a ir b yra lygūs 0x10 ir 0x14, atitinkamai. Dabar eilutėje tris, kas yra x ir y? Na, niekas nepasikeitė apie x ir y šiame taške. Nors jie yra viduje pagrindinis kamino rėmo, jie vis dar turi tą pačią vertės jie anksčiau. Mes nepakeitė jokios atminties. Taigi x yra 1, Y yra 2. Gerai. Taigi dabar mes sakė int tmp lygus žvaigždė. Taigi eilutėje keturių viskas yra vienodi, išskyrus tmp. Mes nepasikeitė jokių vertybių nieko, išskyrus tmp. Mes kuriame tmp vienodą žvaigždė. Kas yra žvaigždė? Na, taškų x, Taigi žvaigždė ketina vienodo x, kuris yra 1. Taigi viskas yra nukopijuotas žemyn, ir tmp yra nustatytas 1. Dabar kitą eilutę. Žvaigždė lygu žvaigždė b. Taigi po eilutės five-- vėl gerai, viskas yra tos pačios, išskyrus kokia žvaigždė yra. Kas yra žvaigždė? Na, mes tiesiog pasakė žvaigždė yra x. Taigi, mes keičiame X vienodo žvaigždutėmis b. Kas yra žvaigždė b? y. B dalyse m. Taigi žvaigždė b yra y. Taigi mes kuriame x lygus y, ir visa kita yra tas pats. Taigi mes matome kitą eilutę, kad x yra dabar 2, o likusios yra tik nukopijuoti žemyn. Dabar kitame linijos, žvaigždės b lygu tmp. Na, mes tiesiog pasakė žvaigždė b yra y, todėl mes kuriame y lygus tmp. Visa kita yra tas pats, taip viskas tampa nukopijuoti žemyn. Mes kuriame Y yra lygus tmp, kuris yra vienas, ir visa kita yra tas pats. Dabar pagaliau, linija septyni. Mes grįžome į pagrindinės funkcijos. Mes po apsikeitimo baigtas. Mes praradome a, b, ir tmp, tačiau galiausiai mes nekeičiame jokių vertybių nieko šiuo metu, mes tiesiog nukopijuokite X ir Y žemyn. Ir mes matome, kad x ir y yra dabar 2 ir 1 1 ir 2 vietoj. Apsikeitimo sėkmingai įvykdytas. 28 klausimas. Tarkime, kad jūs susidūrėte pranešimų apie klaidą, Toliau darbo valandomis Kitais metais, kaip CA ar TF. Patarkite, kaip išspręsti kiekvieną iš šių klaidų. Taigi undefined nuoroda į GetString. Kodėl jūs galite pamatyti tai? Na, jei studentas naudoja GetString savo kodą, jie tinkamai maišos įtraukti CS50 dot h įtraukti CS50 biblioteką. Na, ką jie reikia ištaisyti šią klaidą? Jie turi padaryti, yra brūkšnys lcs50 ne komandinės eilutės, kai jie pritaikyti ESS reikalavimams. Taigi, jei jie neina Zaszczękać brūkšnys lcs50, jie nesiruošia faktinis kodas, kuris įgyvendina GetString. Klausimas 29. Netiesiogiai skelbiantis bibliotekos funkcija strlen. Na tai dabar jie neturi padaryti tinkamą maišos yra. Šiuo konkrečiu atveju, failo antraštės jie turi apimti string dot h, įskaitant styginių dot h, dabar student-- dabar sudarytojas turi teisę susipažinti su deklaracijos strlen, ir jis žino, kad Jūsų kodas naudoja strlen teisingai. 30 klausimas. Daugiau procentų konversijos nei duomenų argumentais. Taigi, kas tai yra? Gerai prisimenu, kad tai procentai signs-- kaip jie susiję su printf. Taigi printf galime percent-- mes galime spausdinti kažką kaip procentų i kairinis pasvirasis brūkšnys n. Ar mes galime atspausdinti kaip procentų i, erdvė, proc i, erdvė, proc i. Taigi kiekvienas iš jų procentų ženklai, turime perduoti kintamąjį ties printf pabaigos. Taigi, jei mes sakome, printf paren proc i kairinis pasvirasis brūkšnys n glaudžius paren, gerai, mes sakome, kad mes ruošiant spausdinti sveikasis, bet tada mes negalime praeiti printf sveikasis skaičius, kad iš tikrųjų spausdinti. Taigi čia daugiau procentų konversijų nei duomenų argumentai? Kad sako, kad mes turime visa krūva procentais, ir mes neturime pakankamai kintamuosius faktiškai užpildyti tų procentų. Ir tada tikrai, už 31 klausimą, tikrai neteko 40 baitų vienoje blokus. Taigi tai yra Valgrind klaida. Tai suprantama, kad kažkur savo kodą, turite paskirstyti, kad yra 40 baitai didelės, todėl malloced 40 baitų, ir jūs niekada išlaisvino jį. Greičiausiai Jūs tiesiog reikia radote Atminties nutekėjimas, ir rasti, kur jums reikia nemokamai tai atminties blokas. Ir apklausti 32, negaliojančiu rašyti dydžio 4. Vėlgi tai yra Valgrind klaida. Tai nebūtinai turi daryti su atminties nutekėjimas dabar. Tai, dauguma likely-- Aš turiu galvoje, tai kai negaliojančių atminties teisių rūšiuoti. Ir greičiausiai tai kai rūšiuoti buferio. Kur jūs turite masyvą, gal integer masyvas, ir tegul sako, kad jų dydis 5, ir jūs pabandykite paliesti masyvo laikiklis 5. Taigi, jei jūs bandote rašyti, kad vertė, tai ne atminties gabalas kad jūs iš tikrųjų turi galimybę naudotis ir todėl jūs ketinate gauti šią klaidą, sakydamas negaliojančių užrašyti tai dydis 4. Valgrind ketina pripažinti esate bando paliesti atmintį netinkamai. Ir tai jį quiz0. Aš Rob Bowden, ir tai yra CS50.