1 00:00:00,000 --> 00:00:09,572 2 00:00:09,572 --> 00:00:12,030 ROB Bowden: Saluton, mi estas Rob Bowden, kaj tuj parolos quiz0. 3 00:00:12,030 --> 00:00:13,280 4 00:00:13,280 --> 00:00:14,545 >> Do, unua demando. 5 00:00:14,545 --> 00:00:17,750 Tiu estas la demando, kie vi bezonas por kodigi la nombro 6 00:00:17,750 --> 00:00:21,270 127 en la duuma bulboj. 7 00:00:21,270 --> 00:00:23,550 Se vi volas, vi povus fari la regula konvertiĝo 8 00:00:23,550 --> 00:00:25,950 el bi-- aŭ el dekuma al duuma. 9 00:00:25,950 --> 00:00:28,300 Sed tio probable iri preni multan tempon. 10 00:00:28,300 --> 00:00:31,750 Mi volas diri, vi povis diveni ke, OK, 1 estas en tie, 2 estas en tie, 11 00:00:31,750 --> 00:00:33,650 4 estas en tie, 8 estas en tie. 12 00:00:33,650 --> 00:00:39,280 Facilan vojon, 127 estas 128 minus unu. 13 00:00:39,280 --> 00:00:42,013 Tio plej maldekstra ampolo estas la 128-bito. 14 00:00:42,013 --> 00:00:43,490 15 00:00:43,490 --> 00:00:47,860 Do 127 estas vere ĝuste ĉiuj de la aliaj ampoloj, 16 00:00:47,860 --> 00:00:51,420 ekde tiu estas la plej maldekstra ampolo minus 1. 17 00:00:51,420 --> 00:00:52,800 Estas tio por tiu demando. 18 00:00:52,800 --> 00:00:54,060 >> Demando unu. 19 00:00:54,060 --> 00:00:56,710 Do kun 3 bitoj vi povas reprezentas 8 distingaj valoroj. 20 00:00:56,710 --> 00:01:01,000 Kial, do, estas 7 la plej nenegativaj dekuma entjero povas reprezenti? 21 00:01:01,000 --> 00:01:04,050 Nu, se ni povas nur reprezentas 8 distingaj valoroj 22 00:01:04,050 --> 00:01:07,430 do kion ni tuj estos reprezenti estas 0 tra 7. 23 00:01:07,430 --> 00:01:08,745 0 okupas unu el la valoroj. 24 00:01:08,745 --> 00:01:09,980 25 00:01:09,980 --> 00:01:11,190 >> Demando du. 26 00:01:11,190 --> 00:01:14,610 Kun n bitoj, kiom distinga valoroj povas reprezenti? 27 00:01:14,610 --> 00:01:19,080 Do kun n bitojn, oni havas 2 eblaj valoroj por ĉiu bito. 28 00:01:19,080 --> 00:01:22,300 Do ni havos 2 eblaj valoroj por la unua bito 2 eblaj valoroj 29 00:01:22,300 --> 00:01:24,450 por la dua, 2 ebla por la tria. 30 00:01:24,450 --> 00:01:28,730 Kaj tiel tio estas 2 fojoj 2 fojoj 2, kaj fine la respondo estas 2 al la n. 31 00:01:28,730 --> 00:01:30,010 32 00:01:30,010 --> 00:01:31,100 >> Demando tri. 33 00:01:31,100 --> 00:01:33,450 Kio 0x50 en duuma? 34 00:01:33,450 --> 00:01:39,490 Do memoru tio deksesuma havas tre simpla konvertiĝo al duuma. 35 00:01:39,490 --> 00:01:43,180 Do jen, ni nur bezonas rigardi la 5 kaj la 0 sendepende. 36 00:01:43,180 --> 00:01:45,110 Do kio estas 5 en duuma? 37 00:01:45,110 --> 00:01:48,400 0101, estas la 1 biton kaj la 4 bitoj. 38 00:01:48,400 --> 00:01:49,900 Kio estas 0 en duuma? 39 00:01:49,900 --> 00:01:50,520 Ne malfacila. 40 00:01:50,520 --> 00:01:52,180 0000. 41 00:01:52,180 --> 00:01:54,970 Do ĝuste kunmeti ilin, kaj tio estas la plena nombro de duuma. 42 00:01:54,970 --> 00:01:57,640 01010000. 43 00:01:57,640 --> 00:02:00,439 Kaj se vi volas vi povus forlevu ke plej maldekstra nulo. 44 00:02:00,439 --> 00:02:01,105 Estas pala. 45 00:02:01,105 --> 00:02:02,920 46 00:02:02,920 --> 00:02:05,733 >> Do tiam alternative, kio estas 0x50 en dekuma? 47 00:02:05,733 --> 00:02:08,649 Se vi volas, vi could-- se vi estas pli komforta kun la duuma, 48 00:02:08,649 --> 00:02:11,340 vi povus preni ke duumaj respondon kaj igi ke en dekuma. 49 00:02:11,340 --> 00:02:13,870 Aŭ ni povus simple memori ke deksesuma. 50 00:02:13,870 --> 00:02:21,140 Tiel ke 0 estas en la 0-a loko, kaj la 5 estas en la 16 al la unua loko. 51 00:02:21,140 --> 00:02:25,990 Do jen ni havas 5 fojoj 16 al la unue, plus 0 fojojn 16 al la nulo, 52 00:02:25,990 --> 00:02:27,520 estas 80. 53 00:02:27,520 --> 00:02:29,710 Se vi rigardis la titolo al la demando, 54 00:02:29,710 --> 00:02:32,920 estis CS 80, kiu estis speco de aludo al la respondo al ĉi tiu problemo. 55 00:02:32,920 --> 00:02:34,460 56 00:02:34,460 --> 00:02:35,420 >> Demando kvin. 57 00:02:35,420 --> 00:02:40,320 Ni havas ĉi Scratch skripto, kiu estas ripetante 4 fojoj arakido butero ĵeleo. 58 00:02:40,320 --> 00:02:42,800 Nu do kiel ni nun kodon en C? 59 00:02:42,800 --> 00:02:47,730 Nu, ni havas here-- la parto en negrita Estas la sola parto kiu devis apliki. 60 00:02:47,730 --> 00:02:51,950 Do ni havas 4 buklo ke'S looping 4 tempoj, printf-ing arakido butero ĵeleo, 61 00:02:51,950 --> 00:02:53,910 kun nova linio kiel la problemo petas. 62 00:02:53,910 --> 00:02:55,250 63 00:02:55,250 --> 00:02:57,490 >> Demando ses, alia Scratch problemon. 64 00:02:57,490 --> 00:03:00,210 Ni vidas, ke ni estas en eterna buklo. 65 00:03:00,210 --> 00:03:05,000 Ni diris la variablo i kaj tiam pliigante i per 1. 66 00:03:05,000 --> 00:03:09,580 Nun ni volas fari tion en C. Estas multnombraj manieroj ni povus fari tion. 67 00:03:09,580 --> 00:03:12,840 Tie okazis Kodo ĉiam buklo kiel dum (vera). 68 00:03:12,840 --> 00:03:16,600 Do ni deklaros la variablo i, simple kiel ni havis variablo i en Scratch. 69 00:03:16,600 --> 00:03:21,950 Klarigu la variablo i, kaj ĉiam dum (vera), ni diru la variablo i. 70 00:03:21,950 --> 00:03:25,260 Do printf% i-- aŭ vi povus esti uzita% d. 71 00:03:25,260 --> 00:03:27,985 Ni diru, ke variablo, kaj tiam pliigo ĝi, i ++. 72 00:03:27,985 --> 00:03:29,560 73 00:03:29,560 --> 00:03:30,830 >> Demando sep. 74 00:03:30,830 --> 00:03:35,560 Nun ni volas fari iun tre simila Mario dot c el problemo starigis unu. 75 00:03:35,560 --> 00:03:39,110 Ni volas presi tiujn hashtags, ni volas presi kvin 76 00:03:39,110 --> 00:03:40,700 per tri rektangulo de tiuj hashes. 77 00:03:40,700 --> 00:03:41,770 78 00:03:41,770 --> 00:03:43,162 Do kiel ni faros tion? 79 00:03:43,162 --> 00:03:45,370 Nu, ni donos al vi tutan faskon de kodo, kaj vi nur 80 00:03:45,370 --> 00:03:47,560 devas plenigi la truon krado funkcio. 81 00:03:47,560 --> 00:03:49,540 >> Do kion signifas PrintGrid aspektas? 82 00:03:49,540 --> 00:03:51,480 Nu vi estas preter la larĝo kaj la alto. 83 00:03:51,480 --> 00:03:53,520 Do ni havas eksteran 4 buklo, tio looping 84 00:03:53,520 --> 00:03:57,650 super ĉiuj el la vicoj de ĉi krado, ke ni volas presi. 85 00:03:57,650 --> 00:04:01,250 Do ni havos la interlingva ingita 4 buklo, tio pres super ĉiu kolumno. 86 00:04:01,250 --> 00:04:06,210 Do por ĉiu vico, ni presi por ĉiu kolumno, sola hash. 87 00:04:06,210 --> 00:04:10,045 Tiam ĉe la fino de la vico ni presi sola nova linio por iri al la sekva linio. 88 00:04:10,045 --> 00:04:11,420 Kaj tio estas por la tuta reto. 89 00:04:11,420 --> 00:04:12,810 90 00:04:12,810 --> 00:04:13,675 >> Demando ok. 91 00:04:13,675 --> 00:04:17,170 Funkcio kiel PrintGrid laŭdire havas flankan efikon, sed ne reveno 92 00:04:17,170 --> 00:04:17,670 valoro. 93 00:04:17,670 --> 00:04:19,209 Klarigi la distingon. 94 00:04:19,209 --> 00:04:23,080 Do ĉi dependas sur vi memorante kia kromefikon estas. 95 00:04:23,080 --> 00:04:25,180 Nu, rondveturo value-- Ni scias PrintGrid ne 96 00:04:25,180 --> 00:04:28,180 havi reveno valoro, ekde ĉi tie ĝi diras malplenon. 97 00:04:28,180 --> 00:04:31,150 Do io kiu revenu malplena vere ne revenos nenion. 98 00:04:31,150 --> 00:04:32,200 99 00:04:32,200 --> 00:04:33,620 Do kio estas la kromefikon? 100 00:04:33,620 --> 00:04:36,620 Nu, flanka efekto estas ion tian persistas 101 00:04:36,620 --> 00:04:39,500 post la funkcio randoj kiu ne ĝuste revenis, 102 00:04:39,500 --> 00:04:41,340 kaj ne nur de la eniroj. 103 00:04:41,340 --> 00:04:44,970 >> Do, ekzemple, ni povus ŝanĝi tutmonda variablo. 104 00:04:44,970 --> 00:04:46,590 Tio estus kromefikon. 105 00:04:46,590 --> 00:04:49,000 En ĉi tiu aparta kazo, tre grava flanko efekto 106 00:04:49,000 --> 00:04:51,070 estas videbligi al la ekrano. 107 00:04:51,070 --> 00:04:53,110 Do kiu estas flanka efiko ke PrintGrid havas. 108 00:04:53,110 --> 00:04:54,980 Ni presas tion al la ekrano. 109 00:04:54,980 --> 00:04:56,370 Kaj vi povas pensi ke kiel kromefikon, 110 00:04:56,370 --> 00:04:58,690 ekde tiu estas io kion persistas post tiu funkcio finiĝas. 111 00:04:58,690 --> 00:05:01,481 Tio estas io ekster la medio de tiu funkcio, ke finfine 112 00:05:01,481 --> 00:05:03,380 estas ŝanĝata, La enhavon de la ekrano. 113 00:05:03,380 --> 00:05:05,200 114 00:05:05,200 --> 00:05:05,839 >> Demando naŭ. 115 00:05:05,839 --> 00:05:07,880 Konsideri la programo sube, al kiu linio nombroj 116 00:05:07,880 --> 00:05:09,740 estis aldonitaj por pro diskuto. 117 00:05:09,740 --> 00:05:13,480 Do en tiu programo, ni estas nur nomante GetString, stokante ĝin 118 00:05:13,480 --> 00:05:16,220 en tiu variablo s, kaj tiam videbligi ke variablo s. 119 00:05:16,220 --> 00:05:16,720 OK. 120 00:05:16,720 --> 00:05:19,090 Do klarigi kial linio oni ĉeestas. 121 00:05:19,090 --> 00:05:20,920 #include cs50 dot h. 122 00:05:20,920 --> 00:05:23,820 Kial ni bezonas #include cs50 dot h? 123 00:05:23,820 --> 00:05:26,180 Nu ni vokas la GetString funkcio, 124 00:05:26,180 --> 00:05:28,840 kaj GetString difiniĝas en la cs50 biblioteko. 125 00:05:28,840 --> 00:05:31,600 Do se ni ne havis #include cs50 dot h, 126 00:05:31,600 --> 00:05:35,760 ni akirus ke implica deklaro de la GetString funkcio eraro 127 00:05:35,760 --> 00:05:36,840 de la tradukilo. 128 00:05:36,840 --> 00:05:40,110 Do ni bezonas por inkludi la library-- ni bezonas por inkludi la kaplinio dosieron, 129 00:05:40,110 --> 00:05:42,870 alie la tradukilo ne rekoni ke GetString ekzistas. 130 00:05:42,870 --> 00:05:44,380 131 00:05:44,380 --> 00:05:46,140 >> Klarigi kial linio du ĉeestas. 132 00:05:46,140 --> 00:05:47,890 Do normo io dot h. 133 00:05:47,890 --> 00:05:50,430 Estas ĝuste la sama kiel la antaŭa problemo, 134 00:05:50,430 --> 00:05:53,310 krom anstataŭ kontraktanta kun GetString, ni parolas pri printf. 135 00:05:53,310 --> 00:05:56,654 Do se ni ne diris ke ni bezonas inkludi normo io dot h, 136 00:05:56,654 --> 00:05:58,820 tiam ni ne povos uzi la printf funkcio, 137 00:05:58,820 --> 00:06:00,653 ĉar la tradukilo ne volis scii pri tio. 138 00:06:00,653 --> 00:06:01,750 139 00:06:01,750 --> 00:06:05,260 >> Why-- kio estas la signifo de malplena en linio kvar? 140 00:06:05,260 --> 00:06:08,010 Do jen ni havas int main (void). 141 00:06:08,010 --> 00:06:10,600 Tio nur diras ke ni Ili ne ricevas neniun komandlinio 142 00:06:10,600 --> 00:06:12,280 argumentoj por ĉefa. 143 00:06:12,280 --> 00:06:17,390 Memoru ke ni povus diri int ĉefa int argc kordo argv krampoj. 144 00:06:17,390 --> 00:06:20,400 Do jen ni simple diri malplena diri ni ignoras komandlinio argumentoj. 145 00:06:20,400 --> 00:06:21,840 146 00:06:21,840 --> 00:06:25,225 >> Klarigi, kun respekto al la memoro, precize kio GetString en linio ses revenas. 147 00:06:25,225 --> 00:06:27,040 148 00:06:27,040 --> 00:06:31,640 GetString revenas blokon memoro, tabelo de signoj. 149 00:06:31,640 --> 00:06:34,870 Ĝi estas vere reveni al montrilon al la unua karaktero. 150 00:06:34,870 --> 00:06:37,170 Memoru ke kordoj estas char stelo. 151 00:06:37,170 --> 00:06:41,360 Do s estas puntero al la unua gravulo ajn la kordo estas 152 00:06:41,360 --> 00:06:43,510 kiun la uzanto eniris en la klavaro. 153 00:06:43,510 --> 00:06:47,070 Kaj tiu memoro pasas al malloced, tiel ke memoro estas en la havaĵo. 154 00:06:47,070 --> 00:06:49,080 155 00:06:49,080 --> 00:06:50,450 >> Demando 13. 156 00:06:50,450 --> 00:06:51,960 Konsideri la programo sube. 157 00:06:51,960 --> 00:06:55,579 Do ĉiuj ĉi programo faras estas printf-ing 1 dividita per 10. 158 00:06:55,579 --> 00:06:57,370 Do kiam kompilis kaj ekzekutitaj, ĉi programo 159 00:06:57,370 --> 00:07:01,170 eligoj 0.0, kvankam 1 dividita per 10 estas 0.1. 160 00:07:01,170 --> 00:07:02,970 Do kial 0.0? 161 00:07:02,970 --> 00:07:05,510 Nu, tio estas pro tio de entjera divido. 162 00:07:05,510 --> 00:07:08,580 Tiel 1 estas entjero 10 estas entjero. 163 00:07:08,580 --> 00:07:11,980 Do 1 dividita per 10, ĉio estas traktata kiel entjeroj, 164 00:07:11,980 --> 00:07:16,380 kaj en C, kiam ni faros entjera divido, ni senpintigas ajna dekuma punkto. 165 00:07:16,380 --> 00:07:19,590 Do 1 dividita per 10 estas 0, kaj tiam ni provas 166 00:07:19,590 --> 00:07:24,410 presi tion kiel float, do nulo presita kiel float estas 0.0. 167 00:07:24,410 --> 00:07:27,400 Kaj tio estas kial ni atingos 0.0. 168 00:07:27,400 --> 00:07:28,940 >> Konsideri la programo sube. 169 00:07:28,940 --> 00:07:31,280 Nun ni presi 0.1. 170 00:07:31,280 --> 00:07:34,280 Do ne entjera divido, Ni nur presi 0.1, 171 00:07:34,280 --> 00:07:37,100 sed ni videbligi ĝin 28 dekumaj lokoj. 172 00:07:37,100 --> 00:07:41,810 Kaj ni preni ĉi 0,1000, tuta aro da de nuloj, 5 5 5, bla bla bla. 173 00:07:41,810 --> 00:07:45,495 Do la demando tie estas kial ĝi presi ke, anstataŭ ĝuste 0.1? 174 00:07:45,495 --> 00:07:46,620 175 00:07:46,620 --> 00:07:49,640 >> Do la kialo jen nun glitpunktaj imprecision. 176 00:07:49,640 --> 00:07:53,410 Memoru ke float nur 32 bitoj. 177 00:07:53,410 --> 00:07:57,540 Do ni povas nur reprezenti finia nombro de glitpunktaj valoroj kun tiuj 32 178 00:07:57,540 --> 00:07:58,560 bitojn. 179 00:07:58,560 --> 00:08:01,760 Nu tie estas finfine malfinie multaj glitpunktaj valoroj 180 00:08:01,760 --> 00:08:04,940 kaj ekzistas malfinie multaj flotante punkto valorojn inter 0 kaj 1, 181 00:08:04,940 --> 00:08:07,860 kaj ni evidente povis reprezentas eĉ pli valoroj ol tio. 182 00:08:07,860 --> 00:08:13,230 Do ni devas fari oferojn al povi reprezenti plej valorojn. 183 00:08:13,230 --> 00:08:16,960 >> Do valoron kiel 0,1, ŝajne ni ne povas reprezenti ke ĝuste. 184 00:08:16,960 --> 00:08:22,500 Do anstataŭ reprezenti 0.1 ni faru bona kiu povas reprezenti ĉi 0.100000 5 5 185 00:08:22,500 --> 00:08:23,260 5. 186 00:08:23,260 --> 00:08:26,306 Kaj tio estas sufiĉe proksima, sed por multaj aplikoj 187 00:08:26,306 --> 00:08:28,430 Vi devas maltrankviligi glitpunktaj imprecision, 188 00:08:28,430 --> 00:08:30,930 ĉar ni simple ne povas reprezenti ĉiuj flosante punktoj ekzakte. 189 00:08:30,930 --> 00:08:32,500 190 00:08:32,500 --> 00:08:33,380 >> Demando 15. 191 00:08:33,380 --> 00:08:34,679 Konsideri la kodon sube. 192 00:08:34,679 --> 00:08:36,630 Ni nur presi 1 plus 1. 193 00:08:36,630 --> 00:08:38,289 Do estas nenia artifiko tie. 194 00:08:38,289 --> 00:08:41,780 1 plus 1 taksas al 2, kaj tiam ni presi tion. 195 00:08:41,780 --> 00:08:42,789 Tiu simple presu 2. 196 00:08:42,789 --> 00:08:43,850 197 00:08:43,850 --> 00:08:44,700 >> Demando 16. 198 00:08:44,700 --> 00:08:49,450 Nun ni presi la karaktero 1 plus la karaktero 1. 199 00:08:49,450 --> 00:08:52,110 Do kial faras ĉi ne presi la saman aferon? 200 00:08:52,110 --> 00:08:57,680 Nu la karaktero 1 plus la karaktero 1, la karaktero 1 havas ASCII valoro 49. 201 00:08:57,680 --> 00:09:04,840 Do tio estas vere dirante 49 plus 49, kaj fine tiu tuj presi 98. 202 00:09:04,840 --> 00:09:06,130 Do tio ne presi 2. 203 00:09:06,130 --> 00:09:08,070 204 00:09:08,070 --> 00:09:09,271 >> Demando 17. 205 00:09:09,271 --> 00:09:11,520 Kompletigi la apliko de nepara malsupre en tia vojo 206 00:09:11,520 --> 00:09:14,615 ke la funkcio redonas vera se n estas nepara kaj malvera se n estas vespero. 207 00:09:14,615 --> 00:09:16,710 208 00:09:16,710 --> 00:09:19,330 Tiu estas granda celo cxar la mod operatoro. 209 00:09:19,330 --> 00:09:24,530 Do ni prenu nian argumento n, se n mod 2 egalas 1, bone 210 00:09:24,530 --> 00:09:28,030 tio signifas ke n dividita per 2 havis restaĵon. 211 00:09:28,030 --> 00:09:33,270 Se n dividita per 2 havis restaĵon, ke signifas ke n estas nepara, do ni revenos vera. 212 00:09:33,270 --> 00:09:34,910 Alie ni revenos malvera. 213 00:09:34,910 --> 00:09:39,070 Vi ankaŭ povus esti farita n Mod 2 egaluloj nulo, revenu falsa, alie redoni vera. 214 00:09:39,070 --> 00:09:41,600 215 00:09:41,600 --> 00:09:43,640 >> Konsideri la rekursia funkcio sube. 216 00:09:43,640 --> 00:09:46,920 Do se n estas malpli ol aŭ egala al 1, revenu 1 217 00:09:46,920 --> 00:09:50,430 alie reveno n fojoj f n minus 1. 218 00:09:50,430 --> 00:09:52,556 Do kio estas tiu funkcio? 219 00:09:52,556 --> 00:09:54,305 Nu, tio estas nur la faktoriala funkcio. 220 00:09:54,305 --> 00:09:55,410 221 00:09:55,410 --> 00:09:57,405 Tiu estas bonguste reprezentitaj kiel n faktorialo. 222 00:09:57,405 --> 00:09:58,720 223 00:09:58,720 --> 00:10:02,310 >> Do pridubi 19 Nun, ni volas prenu ĉi rekursia funkcio. 224 00:10:02,310 --> 00:10:04,530 Ni volas fari ripeta. 225 00:10:04,530 --> 00:10:05,874 Do kiel ni faru tion? 226 00:10:05,874 --> 00:10:07,790 Bone por la ŝablono solvon, kaj denove ekzistas 227 00:10:07,790 --> 00:10:11,090 multnombraj manieroj vi povus esti farita ke ni komencu per tiu int produkto 228 00:10:11,090 --> 00:10:11,812 estas 1. 229 00:10:11,812 --> 00:10:13,520 Kaj laŭlonge ĉi por buklo, ni iras 230 00:10:13,520 --> 00:10:17,590 esti multiplikante produkto finfine finas kun la plena faktorialon. 231 00:10:17,590 --> 00:10:21,870 Do por int i egalas 2, i estas malpli ol aŭ egala al n, i ++. 232 00:10:21,870 --> 00:10:24,130 >> Vi povus mirantaj kial i egalas 2. 233 00:10:24,130 --> 00:10:28,380 Nu, memoru, ke ĉi tie ni devas certigi nia bazo kazo estas korekta. 234 00:10:28,380 --> 00:10:32,180 Do se n estas malpli ol aŭ egala 1, ni ĵus revenis 1. 235 00:10:32,180 --> 00:10:34,830 Do ĉi tie, ni komencos je i egalas 2. 236 00:10:34,830 --> 00:10:39,090 Nu, se i estis 1, tiam the-- aŭ se n estis 1, tiam la por buklo 237 00:10:39,090 --> 00:10:40,600 ne ekzekuti ajn. 238 00:10:40,600 --> 00:10:43,190 Kaj tial ni volas nur reveno produkto, kiu estas 1. 239 00:10:43,190 --> 00:10:45,920 Simile, se n estis io malpli ol 1-- 240 00:10:45,920 --> 00:10:49,290 se ĝi estis 0, negativa 1 whatever-- ni volas ankoraŭ reveni 1 241 00:10:49,290 --> 00:10:52,260 kiu estas ĝuste kio la rekursiaj versio faras. 242 00:10:52,260 --> 00:10:54,660 >> Nun, se n estas pli granda ol 1, do ni iras 243 00:10:54,660 --> 00:10:56,550 fari almenaŭ unu ripeto de ĉi maŝo. 244 00:10:56,550 --> 00:11:00,630 Tiel diru n estas 5, tiam ni faros produkto tempoj egalas 2. 245 00:11:00,630 --> 00:11:02,165 Do nun produkto estas 2. 246 00:11:02,165 --> 00:11:04,040 Nun ni tuj faros produkto tempoj egalas 3. 247 00:11:04,040 --> 00:11:04,690 Nun estas 6. 248 00:11:04,690 --> 00:11:07,500 Produkto tempoj egalas 4, nun estas 24. 249 00:11:07,500 --> 00:11:10,420 Produkto tempoj egalas 5, nun estas 120. 250 00:11:10,420 --> 00:11:16,730 Do tiam finfine, ni reveni 120, kiu estas ĝuste 5 faktorialon. 251 00:11:16,730 --> 00:11:17,510 >> Demando 20. 252 00:11:17,510 --> 00:11:22,480 Tio estas la unu kie vi devas plenigi en tiu tablo kun ajna donita algoritmo, 253 00:11:22,480 --> 00:11:25,735 tio kion ni jam vidis, ke zonas tiuj algoritma run 254 00:11:25,735 --> 00:11:28,060 fojoj tiuj asimptota run fojojn. 255 00:11:28,060 --> 00:11:33,270 Do kio estas algoritmo kiu Estas omega de 1, sed granda O de n? 256 00:11:33,270 --> 00:11:35,970 Do povus esti senfine multajn respondojn tie. 257 00:11:35,970 --> 00:11:39,790 Kiu ni vidis probable plej ofte estas nur lineara serĉo. 258 00:11:39,790 --> 00:11:42,050 >> Do, en la plej bona kazo scenaro, la eron ni 259 00:11:42,050 --> 00:11:44,050 serĉas estas en la komencante de la listo 260 00:11:44,050 --> 00:11:47,400 kaj tiel en omega el 1 paŝojn, ni unue kontroli, 261 00:11:47,400 --> 00:11:49,740 ni nur tuj revenos kiun ni trovis la elementon. 262 00:11:49,740 --> 00:11:52,189 En la plej malbona kazo scenaro, la eron estas ĉe la fino, 263 00:11:52,189 --> 00:11:53,730 aŭ eron ne estas en la listo iel ajn. 264 00:11:53,730 --> 00:11:56,700 Do ni devas serĉi la tutan liston, ĉiuj n 265 00:11:56,700 --> 00:11:58,480 elementoj, kaj tial ĝi estas o de n. 266 00:11:58,480 --> 00:11:59,670 267 00:11:59,670 --> 00:12:04,880 >> Do nun estas io tio estas ambaŭ omega n log n, kaj granda O de n log n. 268 00:12:04,880 --> 00:12:08,650 Nu la plej grava afero ni vidis tie estas kunfandi varo. 269 00:12:08,650 --> 00:12:12,950 Do kunfandi speco, memoru, estas finfine theta 270 00:12:12,950 --> 00:12:16,920 de n log n, kie theta difiniĝas se ambaŭ omega kaj granda O estas la sama. 271 00:12:16,920 --> 00:12:17,580 Ambaŭ n log n. 272 00:12:17,580 --> 00:12:18,690 273 00:12:18,690 --> 00:12:21,970 >> Kio estas iu kiu estas omega de n, kaj O de n kvadratoj? 274 00:12:21,970 --> 00:12:23,990 Nu, denove ne estas multnombraj eblaj respondoj. 275 00:12:23,990 --> 00:12:26,440 Tie okazos diri bobelo varo. 276 00:12:26,440 --> 00:12:28,840 Inserción speco ankaŭ laboros tie. 277 00:12:28,840 --> 00:12:31,400 Memoru ke bobelo speco havas tiun optimumigo kie, 278 00:12:31,400 --> 00:12:34,630 Se vi estas kapabla akiri tra la tutan liston 279 00:12:34,630 --> 00:12:37,402 sen neceso fari ajna interŝanĝojn do bone, 280 00:12:37,402 --> 00:12:40,110 ni povas tuj reveni ke la lerta estis ordo por komenci kun. 281 00:12:40,110 --> 00:12:43,185 Do, en la plej bona kazo scenaro, estas nur omega de n. 282 00:12:43,185 --> 00:12:45,960 Se ĝi ne estas nur bele ordigita listo komenci kun, 283 00:12:45,960 --> 00:12:48,270 tiam ni havi O de n kvadratoj interŝanĝojn. 284 00:12:48,270 --> 00:12:49,330 285 00:12:49,330 --> 00:12:55,610 Kaj fine, ni havas selektadon speco por n kvadratoj, ambaŭ omega kaj granda O. 286 00:12:55,610 --> 00:12:56,850 >> Demando 21. 287 00:12:56,850 --> 00:12:58,870 Kio estas entjero overflow? 288 00:12:58,870 --> 00:13:02,160 Nu denove, simila al pli fruaj, Ni havas nur finie multaj bitoj 289 00:13:02,160 --> 00:13:04,255 reprezenti entjero, do eble 32 bitoj. 290 00:13:04,255 --> 00:13:06,300 291 00:13:06,300 --> 00:13:09,180 Supozu ke ni havas subskribita entjero. 292 00:13:09,180 --> 00:13:12,800 Tiam finfine la plej alta pozitiva nombro povas reprezenti 293 00:13:12,800 --> 00:13:15,910 estas 2 al la 31 minus 1. 294 00:13:15,910 --> 00:13:19,370 Do kio okazas se ni provas tiam pliigo ke entjero? 295 00:13:19,370 --> 00:13:25,320 Nu, ni iras, por foriri de 2 al la 31 minus 1, la tutan vojon malsupren al negativa 2 296 00:13:25,320 --> 00:13:26,490 al la 31. 297 00:13:26,490 --> 00:13:29,470 Do tiu entjero overflow estas kiam vi konservos pliigante, 298 00:13:29,470 --> 00:13:32,330 kaj finfine ne povas akiri ajnan pli altan kaj nur 299 00:13:32,330 --> 00:13:34,520 kovras la tutan vojon reen ĉirkaŭe al negativa valoro. 300 00:13:34,520 --> 00:13:35,850 301 00:13:35,850 --> 00:13:37,779 >> Kio pri buffer overflow? 302 00:13:37,779 --> 00:13:39,820 Do buffer overflow-- memoru kion buffer estas. 303 00:13:39,820 --> 00:13:41,000 Estas nur eron de memoro. 304 00:13:41,000 --> 00:13:43,350 Io kiel tabelo estas bufro. 305 00:13:43,350 --> 00:13:46,120 Do buffer overflow estas kiam provu aliri memoro 306 00:13:46,120 --> 00:13:47,880 preter la fino de tiu tabelo. 307 00:13:47,880 --> 00:13:50,410 Do se vi havas tabelo de amplekso 5 kaj vi 308 00:13:50,410 --> 00:13:53,700 provu aliri tabelo krampo 5 aŭ krampo 6 aŭ krampo 7 309 00:13:53,700 --> 00:13:56,610 aŭ io preter la fino, aŭ eĉ ion 310 00:13:56,610 --> 00:14:00,790 below-- tabelo krampo negativa 1-- ĉiuj el tiuj estas bufro superfluas. 311 00:14:00,790 --> 00:14:02,810 Vi tuŝis memoro en malbonaj manieroj. 312 00:14:02,810 --> 00:14:04,090 313 00:14:04,090 --> 00:14:04,730 >> Demando 23. 314 00:14:04,730 --> 00:14:05,760 315 00:14:05,760 --> 00:14:09,100 Do en ĉi tiu necesas implementar strlen. 316 00:14:09,100 --> 00:14:11,630 Kaj ni diras al vi ke vi povas supozi s ne estos nula, 317 00:14:11,630 --> 00:14:13,790 tial vi ne devas fari ajnan ĉeko nula. 318 00:14:13,790 --> 00:14:16,190 Kaj ekzistas multnombraj manieroj Vi povus fari tion. 319 00:14:16,190 --> 00:14:18,440 Ĉi tie ni nur prenu la simpla. 320 00:14:18,440 --> 00:14:21,780 Ni komencu per nombrilo, n. n estas rakonti cuantos karakteroj ekzistas. 321 00:14:21,780 --> 00:14:25,560 Do ni komencu je 0, kaj poste ni persisti super la tutan liston. 322 00:14:25,560 --> 00:14:29,092 >> Ĉu s krampo 0 egalas al la null terminator karakteron? 323 00:14:29,092 --> 00:14:31,425 Memoru ni serĉas la nula terminator karaktero 324 00:14:31,425 --> 00:14:33,360 determini kiel longe nia kordoj estas. 325 00:14:33,360 --> 00:14:35,890 Kiu tuj chesigi ajna rilatajn kordo. 326 00:14:35,890 --> 00:14:39,400 Tia estas la krampo 0 egalaj al la nula terminator? 327 00:14:39,400 --> 00:14:42,850 Se ĝi ne estas, tiam ni tuj rigardi s krampo 1, s krampo 2. 328 00:14:42,850 --> 00:14:45,050 Ni dauxre iros ĝis ni trovi la nulan finilo. 329 00:14:45,050 --> 00:14:48,580 Iam ni trovis ĝin, tiam n enhavas la tuta longo de la kordo, 330 00:14:48,580 --> 00:14:49,942 kaj ni povas nur redoni tion. 331 00:14:49,942 --> 00:14:51,180 332 00:14:51,180 --> 00:14:51,865 >> Demando 24. 333 00:14:51,865 --> 00:14:53,010 334 00:14:53,010 --> 00:14:56,050 Do tiu estas kie vi devi fari la komercon for. 335 00:14:56,050 --> 00:14:59,810 Do unu afero estas bona en unu vojo, sed en kia maniero estas malbona? 336 00:14:59,810 --> 00:15:02,980 Do jen, kunfandi speco inklinas esti pli rapida ol bobelo varo. 337 00:15:02,980 --> 00:15:06,530 Dirinte that-- bone, tie Estas multnombraj respondojn tie. 338 00:15:06,530 --> 00:15:12,930 Sed la ĉefa estas kiu bobelo speco Estas omega de n por ordo listo. 339 00:15:12,930 --> 00:15:14,950 >> Memoru ke tablo ni vidis antaŭe. 340 00:15:14,950 --> 00:15:17,600 Do bobelo ordigas omega de n, la plej bona kazo scenaro 341 00:15:17,600 --> 00:15:20,010 cxu estas kapabla simple transiru la liston unufoje, determini 342 00:15:20,010 --> 00:15:22,270 hey afero estas jam ordigataj kaj reveno. 343 00:15:22,270 --> 00:15:25,960 Kunfandi speco, negrave kio vi faras, estas omega n log n. 344 00:15:25,960 --> 00:15:29,200 Do por ordo listo, bobelo speco tuj estos rapida. 345 00:15:29,200 --> 00:15:30,870 346 00:15:30,870 --> 00:15:32,430 >> Nun kio pri ligitaj listoj? 347 00:15:32,430 --> 00:15:36,070 Do ligillisto povas kreski kaj retiri por persvadi kiel multaj eroj kiel bezonataj. 348 00:15:36,070 --> 00:15:38,489 Dirinte that-- tiel kutime la rekta komparo 349 00:15:38,489 --> 00:15:40,280 tuj estos kunligita listo kun tabelo. 350 00:15:40,280 --> 00:15:41,600 351 00:15:41,600 --> 00:15:44,050 Do kvankam arrays povas facile kreski kaj retiri 352 00:15:44,050 --> 00:15:47,130 por persvadi kiel multaj eroj drajvo, kunligita listo 353 00:15:47,130 --> 00:15:49,600 kompare al array-- oni tabelo havas hazarda aliro. 354 00:15:49,600 --> 00:15:52,960 Povas indekson en ajna aparta ero de la tabelo. 355 00:15:52,960 --> 00:15:56,430 >> Do por ligillisto, ni ne povas nur iri al la kvina ero, 356 00:15:56,430 --> 00:16:00,260 ni devos trairi la komenco ĝis ni atingos la kvina ero. 357 00:16:00,260 --> 00:16:03,990 Kaj tio tuj neebligos nin el fari iun kiel duuma serĉo. 358 00:16:03,990 --> 00:16:08,150 Parolante pri duuma serĉo, duuma serĉo inklinas esti pli rapide ol lineara serĉo. 359 00:16:08,150 --> 00:16:11,120 Dirinte that-- tiel, unu ebla 360 00:16:11,120 --> 00:16:13,380 estas ke vi ne povas fari duuma serĉu en ligitaj lertaj, 361 00:16:13,380 --> 00:16:14,730 vi nur povas fari ĝin sur arrays. 362 00:16:14,730 --> 00:16:18,030 Sed verŝajne pli grave, vi ne povas plenumi duuma serĉo 363 00:16:18,030 --> 00:16:20,690 sur tabelo kiu ne ordo. 364 00:16:20,690 --> 00:16:23,990 Upfront vi eble bezonas ordigi la tabelo, kaj nur tiam povas 365 00:16:23,990 --> 00:16:25,370 vi faru duuma serĉo. 366 00:16:25,370 --> 00:16:27,660 Do se via afero ne ordo por komenci, 367 00:16:27,660 --> 00:16:29,250 tiam lineara serĉo povus esti rapida. 368 00:16:29,250 --> 00:16:30,620 369 00:16:30,620 --> 00:16:31,740 >> Demando 27. 370 00:16:31,740 --> 00:16:34,770 Do konsideru la programo sube, kiuj estos en la proksima diapozitivo. 371 00:16:34,770 --> 00:16:37,790 Kaj jen estas la unu kie ni estas tuj volas eksplicite deklari 372 00:16:37,790 --> 00:16:39,980 la valorojn de pluraj variabloj. 373 00:16:39,980 --> 00:16:41,990 Do, ni rigardu tion. 374 00:16:41,990 --> 00:16:43,160 >> Do linio unu. 375 00:16:43,160 --> 00:16:45,457 Ni havas int x estas 1. 376 00:16:45,457 --> 00:16:47,040 Tio estas la nura afero kiu okazis. 377 00:16:47,040 --> 00:16:50,440 Do en linio, ni vidas en nia tablo, y, a, b, kaj tmp estas ĉiuj 378 00:16:50,440 --> 00:16:51,540 nigra for. 379 00:16:51,540 --> 00:16:52,280 Do kio estas x? 380 00:16:52,280 --> 00:16:53,860 Nu, ni nur starigis lin egala al 1. 381 00:16:53,860 --> 00:16:55,020 382 00:16:55,020 --> 00:16:58,770 Kaj tiam vicigi du, nu, Ni vidos ke y estas fiksita al 2, 383 00:16:58,770 --> 00:17:00,550 kaj la tablo estas jam plenigis por ni. 384 00:17:00,550 --> 00:17:03,040 Tiel x estas 1 kaj y estas 2. 385 00:17:03,040 --> 00:17:05,890 >> Nun, linio tri, ni estas nun ene la interŝanĝan funkcio. 386 00:17:05,890 --> 00:17:07,560 Kion ni pasas por interŝanĝi? 387 00:17:07,560 --> 00:17:11,609 Ni pasis ampersand x por a, kaj ampersand y por b. 388 00:17:11,609 --> 00:17:15,160 Kie la problemo antaŭe asertis, ke la adreso de x 389 00:17:15,160 --> 00:17:17,520 Estas 0x10, kaj la adreso de y estas 0x14. 390 00:17:17,520 --> 00:17:18,970 391 00:17:18,970 --> 00:17:21,909 Do a kaj b estas egala al 0x10 kaj 0x14, respektive. 392 00:17:21,909 --> 00:17:23,670 393 00:17:23,670 --> 00:17:26,250 >> Nun je linio tri, kio estas x kaj y? 394 00:17:26,250 --> 00:17:28,554 Nu, nenio ŝanĝiĝis proksimume x kaj y en tiu punkto. 395 00:17:28,554 --> 00:17:30,470 Kvankam ili estas ene ĉefa stako, 396 00:17:30,470 --> 00:17:32,469 Ili ankoraŭ havas la saman valoroj antauxe. 397 00:17:32,469 --> 00:17:34,030 Ni ne modifita ajnan memoron. 398 00:17:34,030 --> 00:17:35,710 Tiel x estas 1, y estas 2. 399 00:17:35,710 --> 00:17:36,550 400 00:17:36,550 --> 00:17:37,050 Bone. 401 00:17:37,050 --> 00:17:40,300 Do nun ni diris int tmp egalaj star a. 402 00:17:40,300 --> 00:17:44,410 Do en linio kvar, ĉiu Estas la sama krom tmp. 403 00:17:44,410 --> 00:17:47,130 Ni ne ŝanĝis ajn valoroj nenion krom tmp. 404 00:17:47,130 --> 00:17:49,230 Ni opcio tmp egalaj star a. 405 00:17:49,230 --> 00:17:50,620 Kio estas stelo pli? 406 00:17:50,620 --> 00:17:56,240 Nu, punktoj x, do star oni tuj egala x, kiu estas 1. 407 00:17:56,240 --> 00:18:00,080 Do ĉio estas kopiita malsupren, kaj tmp estas fiksita al 1. 408 00:18:00,080 --> 00:18:01,110 >> Nun la sekva linio. 409 00:18:01,110 --> 00:18:03,380 Star a egalas stelo b. 410 00:18:03,380 --> 00:18:10,000 Do por linio five-- bone denove, ĉio Estas la sama krom ajn stelon a estas. 411 00:18:10,000 --> 00:18:10,830 Kio estas stelo pli? 412 00:18:10,830 --> 00:18:13,720 Nu, ni nur diris stelo a estas x. 413 00:18:13,720 --> 00:18:16,400 Do ni ŝanĝi x al egala stelo b. 414 00:18:16,400 --> 00:18:18,960 Kio estas stelo b? y. b punktoj al y. 415 00:18:18,960 --> 00:18:21,030 Do stelo b estas y. 416 00:18:21,030 --> 00:18:25,140 Do ni opcio x egalas al y, kaj ĉio alia estas sama. 417 00:18:25,140 --> 00:18:29,130 Do ni vidas en la sekva vico x estas nun 2, kaj la resto estas nur kopiis suben. 418 00:18:29,130 --> 00:18:31,120 >> Nun en la sekva linio, stelo b egalas tmp. 419 00:18:31,120 --> 00:18:34,740 Nu, ni nur diris stelo b estas y, tial ni opcio y egalas al tmp. 420 00:18:34,740 --> 00:18:37,450 Ĉio alia estas la sama, tial ĉiu prenas kopiitaj suben. 421 00:18:37,450 --> 00:18:42,050 Ni opcio y egalas al tmp, kio estas unu, kaj ĉio alia estas sama. 422 00:18:42,050 --> 00:18:43,210 >> Nun fine, la linio sep. 423 00:18:43,210 --> 00:18:44,700 Ni estas reen en la ĉefa funkcio. 424 00:18:44,700 --> 00:18:46,350 Ni post swap estas finita. 425 00:18:46,350 --> 00:18:48,972 Ni perdis, b, kaj tmp, sed finfine ni 426 00:18:48,972 --> 00:18:51,180 ne ŝanĝi ĉiujn valorojn de io ĉe tiu punkto, 427 00:18:51,180 --> 00:18:52,800 ni simple kopiu x kaj y suben. 428 00:18:52,800 --> 00:18:56,490 Kaj ni vidos ke x kaj y estas Nun 2 kaj 1 anstataŭ 1 kaj 2. 429 00:18:56,490 --> 00:18:58,160 La interŝanĝa sukcese ekzekutita. 430 00:18:58,160 --> 00:18:59,500 431 00:18:59,500 --> 00:19:00,105 >> Demando 28. 432 00:19:00,105 --> 00:19:01,226 433 00:19:01,226 --> 00:19:03,100 Supozu ke vi renkontas La erarmesaĝoj 434 00:19:03,100 --> 00:19:06,790 malsupre dum oficejo horoj sekva jaro kiel CA aŭ TF. 435 00:19:06,790 --> 00:19:08,930 Konsilus kiel ripari ĉiu el tiuj eraroj. 436 00:19:08,930 --> 00:19:11,160 Do nedefinita referencon GetString. 437 00:19:11,160 --> 00:19:12,540 Kial povus vi vidas tion? 438 00:19:12,540 --> 00:19:15,380 Nu, se studento estas uzanta GetString en sian kodon, 439 00:19:15,380 --> 00:19:20,310 ili adekvate Hash inkludis cs50 dot h inkludi la cs50 biblioteko. 440 00:19:20,310 --> 00:19:22,380 >> Nu, kion fari ili bezonas korekti tiun eraron? 441 00:19:22,380 --> 00:19:26,810 Ili bezonas fari strekon lcs50 ĉe la komandlinio kiam ili estas kompilita. 442 00:19:26,810 --> 00:19:29,501 Do se ili ne transiros tin haltostreko lcs50, ili estas 443 00:19:29,501 --> 00:19:32,000 ne tuj havos la fakta kodo kiu implementa GetString. 444 00:19:32,000 --> 00:19:33,190 445 00:19:33,190 --> 00:19:34,170 >> Demando 29. 446 00:19:34,170 --> 00:19:36,190 Implice deklarante biblioteko funkcio strlen. 447 00:19:36,190 --> 00:19:37,550 448 00:19:37,550 --> 00:19:40,360 Nu tiu nun, ili ne havas faris la taŭgan hash inkluzivi. 449 00:19:40,360 --> 00:19:41,440 450 00:19:41,440 --> 00:19:45,410 En ĉi tiu aparta kazo, la kaplinio dosieron ili bezonas por inkludi estas kordoj dot h, 451 00:19:45,410 --> 00:19:48,710 kaj inkludante kordo dot h, hodiaŭ la student-- nun la tradukilo 452 00:19:48,710 --> 00:19:51,750 havas aliron al la deklaroj de strlen, 453 00:19:51,750 --> 00:19:54,120 kaj ĝi scias ke via kodo uzas strlen korekte. 454 00:19:54,120 --> 00:19:55,380 455 00:19:55,380 --> 00:19:56,580 >> Demando 30. 456 00:19:56,580 --> 00:20:00,240 Pli procento konvertiĝoj ol datumoj argumentoj. 457 00:20:00,240 --> 00:20:01,540 Do kio estas tio? 458 00:20:01,540 --> 00:20:06,470 Memoru ke tiuj procentoj signs-- kiom ili estas adekvataj al printf. 459 00:20:06,470 --> 00:20:08,890 Do en printf ni povus percent-- ni povus presi ion 460 00:20:08,890 --> 00:20:11,380 kiel procento i backslash n. 461 00:20:11,380 --> 00:20:15,310 Aŭ ni povus presi kiel procento i, spaco, procento i, spaco, procento i. 462 00:20:15,310 --> 00:20:18,950 Do por ĉiu el tiuj procento signoj, ni bezonas 463 00:20:18,950 --> 00:20:21,560 pasi variablo fine de printf. 464 00:20:21,560 --> 00:20:26,980 >> Do se ni diras printf paren procento i backslash n proksime paren, 465 00:20:26,980 --> 00:20:30,270 nu, ni diru, ke ni estas tuj presi entjero, 466 00:20:30,270 --> 00:20:33,970 sed poste ni ne pasas printf entjero al reale presi. 467 00:20:33,970 --> 00:20:37,182 Do jen pli procento konvertiĝoj ol datumoj argumentoj? 468 00:20:37,182 --> 00:20:39,390 Tio diras, ke ni havas tutan faskon da por cent, 469 00:20:39,390 --> 00:20:42,445 kaj ni ne havas sufiĉe da variabloj efektive plenigi tiujn por cent. 470 00:20:42,445 --> 00:20:44,850 471 00:20:44,850 --> 00:20:50,010 >> Kaj tiam definitive, por demando 31 definitive perdis 40 bitokoj en unu blokojn. 472 00:20:50,010 --> 00:20:52,350 Do tio estas Valgrind eraro. 473 00:20:52,350 --> 00:20:54,720 Tiu diras ke ie en via kodo, 474 00:20:54,720 --> 00:20:59,010 vi havas atribuo kiu estas 40 bajtojn grandajn tiel vi malloced 40 bajtoj, 475 00:20:59,010 --> 00:21:00,515 kaj vi neniam liberigita ĝin. 476 00:21:00,515 --> 00:21:02,480 477 00:21:02,480 --> 00:21:05,140 Plej verŝajne vi nur bezonos trovi iun memoro liko, 478 00:21:05,140 --> 00:21:07,650 kaj trovi kie necesas liberigi tiu bloko de memoro. 479 00:21:07,650 --> 00:21:08,780 480 00:21:08,780 --> 00:21:11,910 >> Kaj pridubi 32, nevalida registran de grandeco 4. 481 00:21:11,910 --> 00:21:13,250 Denove ĉi estas Valgrind eraro. 482 00:21:13,250 --> 00:21:15,440 Ĉi tio ne devas fari kun memoro fugoj nun. 483 00:21:15,440 --> 00:21:20,750 Tio estas, la plej likely-- Mi volas diri, estas ia nevalida memoro rajtoj. 484 00:21:20,750 --> 00:21:23,270 Kaj plej verŝajne tiu estas iuj ia buffer overflow. 485 00:21:23,270 --> 00:21:26,560 Kie vi havas tabelo, eble entjera tabelo, kaj ni 486 00:21:26,560 --> 00:21:30,115 diras ke estas de amplekso 5, kaj vi provu tuŝi tabelo krampo 5. 487 00:21:30,115 --> 00:21:34,150 Do se vi provas skribi por ke valoro, tio ne estas peco de memoro 488 00:21:34,150 --> 00:21:37,440 ke vi efektive havas aliron al, kaj tial vi estas iranta akiri tiun eraron, 489 00:21:37,440 --> 00:21:39,272 dirante nevalida registran de grandeco 4. 490 00:21:39,272 --> 00:21:42,480 Valgrind tuj rekonos vi provas tuŝi memoro netaŭge. 491 00:21:42,480 --> 00:21:43,980 >> Kaj tio estas por quiz0. 492 00:21:43,980 --> 00:21:47,065 Mi Rob Bowden, kaj ĉi tiu estas CS50. 493 00:21:47,065 --> 00:21:51,104