1 00:00:00,000 --> 00:00:10,970 >> [Halisi kucheza] 2 00:00:10,970 --> 00:00:12,536 >> DAVID J. Malan: zote haki. 3 00:00:12,536 --> 00:00:13,392 >> [Kicheko] 4 00:00:13,392 --> 00:00:14,240 >> Karibu tena. 5 00:00:14,240 --> 00:00:14,990 Hii ni CS50. 6 00:00:14,990 --> 00:00:16,890 Na hii ya mwisho wa wiki tano. 7 00:00:16,890 --> 00:00:20,020 Na hadi sasa, tumekuwa pretty much imekuwa kuchukua nafasi ya kwamba kuna 8 00:00:20,020 --> 00:00:23,480 ipo hii mkusanyaji, Clang, kwamba wewe wameweza wamekuwa kutaja kwa njia ya hii 9 00:00:23,480 --> 00:00:27,100 chombo nyingine iitwayo kufanya kwamba kwa namna fulani magically waongofu chanzo yako kificho 10 00:00:27,100 --> 00:00:31,350 katika kitu kificho, zeros na ndio kwamba yako kompyuta CPU, kati 11 00:00:31,350 --> 00:00:33,410 usindikaji kitengo, kweli anaelewa. 12 00:00:33,410 --> 00:00:36,770 Lakini zinageuka kuna idadi hiyo ni kinachoendelea chini ya Hood katika 13 00:00:36,770 --> 00:00:38,690 kati ya pembejeo na mazao. 14 00:00:38,690 --> 00:00:41,800 >> Na ningependa kupendekeza kwamba sisi mwili kuwa nje kwa undani zaidi kidogo katika 15 00:00:41,800 --> 00:00:45,130 hatua hizi nne, kuwa na kitu kinachoitwa kabla ya usindikaji, kitu 16 00:00:45,130 --> 00:00:48,300 kuitwa kuandaa, ambayo tumeona, kitu kinachoitwa kukusanyika, na 17 00:00:48,300 --> 00:00:49,420 kitu kinachoitwa kuunganisha. 18 00:00:49,420 --> 00:00:53,270 Hivyo hadi sasa, katika baadhi ya yetu ya mipango, tumekuwa alikuwa mkali pamoja. 19 00:00:53,270 --> 00:00:56,650 Hivi karibuni tulikuwa na baadhi mkali amefafanua kwa constants. 20 00:00:56,650 --> 00:01:00,660 Hivyo zinageuka kuwa yale mambo ni prefixed na alama hash au 21 00:01:00,660 --> 00:01:04,150 alama ya pound ni kabla ya processor maelekezo. 22 00:01:04,150 --> 00:01:07,960 Hiyo ni njia tu ya dhana ya kusema ni mstari wa kanuni kwamba ni kweli 23 00:01:07,960 --> 00:01:12,280 waongofu katika kitu kingine kabla ya kompyuta hata kujaribu kubadili yako 24 00:01:12,280 --> 00:01:13,800 mpango katika zeros na ndio. 25 00:01:13,800 --> 00:01:19,000 >> Kwa mfano, kali ni pamoja na kiwango I / O h., Pretty much tu ina maana kwenda 26 00:01:19,000 --> 00:01:24,010 mbele, kunyakua yaliyomo ya mafaili stdio.h na kuweka haki yao huko. 27 00:01:24,010 --> 00:01:25,880 Hivyo hakuna zeros na ndio katika hatua bado. 28 00:01:25,880 --> 00:01:27,470 Ni kweli tu badala. 29 00:01:27,470 --> 00:01:30,790 Na kwamba kufanyika wakati kinachojulikana kabla ya usindikaji hatua, wakati wewe 30 00:01:30,790 --> 00:01:34,230 kweli kuendesha Clang au hasa Kufanya katika kesi nyingi. 31 00:01:34,230 --> 00:01:36,950 Hivyo wote hii imekuwa ikitokea kwanza moja kwa moja hivi sasa. 32 00:01:36,950 --> 00:01:38,800 >> Kisha huja hatua mkusanyiko. 33 00:01:38,800 --> 00:01:40,920 Lakini sisi tumekuwa oversimplified mkusanyiko. 34 00:01:40,920 --> 00:01:45,060 Kuandaa mpango wa kweli maana ya kuchukua kutoka kitu kama C, 35 00:01:45,060 --> 00:01:48,430 chanzo kanuni tumekuwa kuandika, chini kwa kitu kinachoitwa mkutano. 36 00:01:48,430 --> 00:01:52,900 Bunge lugha ni ngazi ya chini lugha hiyo, nashiriki, sisi si 37 00:01:52,900 --> 00:01:55,480 kuwa mengi tukio kuandika hii muhula. 38 00:01:55,480 --> 00:01:59,100 Lakini ni katika ngazi ya chini kabisa katika maana ya kwamba wewe literally kuanza kuandika 39 00:01:59,100 --> 00:02:04,270 kutoa na kujumlisha na kuzidisha na mzigo kutokana na kumbukumbu na kuokoa na kumbukumbu, 40 00:02:04,270 --> 00:02:08,259 msingi sana maelekezo ya kwamba kompyuta, chini ya Hood, 41 00:02:08,259 --> 00:02:09,639 kweli anaelewa. 42 00:02:09,639 --> 00:02:14,930 >> Mwisho, kukusanyika inachukua kwamba lugha kwa zeros na wale ambao tumekuwa 43 00:02:14,930 --> 00:02:16,190 kuelezea hivi sasa. 44 00:02:16,190 --> 00:02:19,270 Na kweli mwishowe, kuna kinachojulikana kuunganisha awamu, ambayo tutaweza 45 00:02:19,270 --> 00:02:22,360 kuona katika wakati huu tu, ambao unachanganya zeros yako na ndio na zeros na 46 00:02:22,360 --> 00:02:24,870 wale watu wengine kabla ya una umba. 47 00:02:24,870 --> 00:02:26,660 >> Hivyo kufikiria hili super rahisi mpango. 48 00:02:26,660 --> 00:02:27,560 Ni kutokana na Wiki 1. 49 00:02:27,560 --> 00:02:29,610 Ni tu alisema, Hello Dunia, kwenye screen. 50 00:02:29,610 --> 00:02:30,920 Sisi mbio hili kwa njia ya Clang. 51 00:02:30,920 --> 00:02:33,200 Au sisi mbio ni kwa njia ya kufanya ambayo mbio Clang. 52 00:02:33,200 --> 00:02:36,170 Na outputted wakati ambapo baadhi zeros na ndio. 53 00:02:36,170 --> 00:02:38,100 Lakini zinageuka kuna hatua ya kati. 54 00:02:38,100 --> 00:02:40,460 Kama mimi kwenda juu hapa - oops, hakuwa wanataka kumwona bado. 55 00:02:40,460 --> 00:02:44,800 Kama mimi kwenda juu hapa appliance yangu na mimi kufungua hello.c, hapa 56 00:02:44,800 --> 00:02:46,160 ni kwamba mpango huo. 57 00:02:46,160 --> 00:02:48,600 Na kile Mimi naenda kufanya katika terminal yangu dirisha hapa ni mimi nina kwenda 58 00:02:48,600 --> 00:02:51,430 kukimbia Clang badala ya kufanya, ambayo automates zote nne za 59 00:02:51,430 --> 00:02:52,870 wale hatua kwa ajili yetu. 60 00:02:52,870 --> 00:02:58,620 Na mimi naenda kufanya Clang-S na kisha hello.c na kisha kuingia. 61 00:02:58,620 --> 00:03:00,590 >> Na mimi kupata haraka blinking tena, ambayo ni nzuri. 62 00:03:00,590 --> 00:03:05,280 Na sasa katika dirisha kubwa kidogo, Mimi naenda kufungua gedit katika hapa. 63 00:03:05,280 --> 00:03:09,610 Na mimi nina kwenda kufungua faili kwamba, zamu nje, ni kuitwa hello.s hii 64 00:03:09,610 --> 00:03:11,870 lina lugha ya mkutano Mimi inajulikana mapema. 65 00:03:11,870 --> 00:03:15,060 Na hii ni nini wito mkutano lugha, haki ya chini ngazi 66 00:03:15,060 --> 00:03:18,470 maelekezo ya kwamba yako Intel CPU au chochote ni kwamba ndani ya 67 00:03:18,470 --> 00:03:19,350 anaelewa. 68 00:03:19,350 --> 00:03:24,480 Na MOV ni kwa hoja. simu ni kwa wito, chini sana ngazi ya kazi. 69 00:03:24,480 --> 00:03:26,380 ndogo ni kwa ajili ya Ondoa. 70 00:03:26,380 --> 00:03:30,370 >> Hivyo wakati una CPU hasa ndani ya ya kompyuta yako, nini inafanya 71 00:03:30,370 --> 00:03:34,300 tofauti, dhidi ya nyingine CPUs juu ya soko, ni maelekezo ambayo ni 72 00:03:34,300 --> 00:03:39,460 anaelewa na mara nyingi jinsi ufanisi ni ni, jinsi ya kufunga ni katika utekelezaji wa baadhi ya 73 00:03:39,460 --> 00:03:40,380 ya wale maelekezo. 74 00:03:40,380 --> 00:03:45,150 Sasa kwa zaidi juu ya hili, unaweza kuchukua ijayo Fall CS61 chuoni. 75 00:03:45,150 --> 00:03:48,170 Lakini hapa tuna, kwa mfano, wachache vitambulisho kwamba ili kuangalia ukoo. 76 00:03:48,170 --> 00:03:50,150 hello.c ni jina la mpango. 77 00:03:50,150 --> 00:03:51,070 >> . Asilia - 78 00:03:51,070 --> 00:03:54,190 kuna si mengi ya riba kuna tu sasa, kukumbuka kwamba maandishi 79 00:03:54,190 --> 00:03:59,190 sehemu, kama ya Jumatatu, ni wapi katika kumbukumbu ya mpango wako kwa kweli mwisho juu. 80 00:03:59,190 --> 00:04:01,330 Hivyo kwamba ni angalau bila kufafanua ukoo huko. 81 00:04:01,330 --> 00:04:03,730 Hapa, bila shaka, ni kutaja ya kazi yetu kuu. 82 00:04:03,730 --> 00:04:07,220 Scrolling chini, hizi kutaja mambo kinachoitwa madaftari, ndogo sana chunks ya 83 00:04:07,220 --> 00:04:09,190 kumbukumbu ndani ya CPU yako halisi. 84 00:04:09,190 --> 00:04:12,930 Na kama mimi kitabu chini hata zaidi, mimi kuona baadhi ya aina 85 00:04:12,930 --> 00:04:14,240 moja kwa moja kutaja ya ASCII. 86 00:04:14,240 --> 00:04:17,120 Na pale, kwa kweli, ni kamba kwamba, hello, comma, dunia. 87 00:04:17,120 --> 00:04:20,079 >> Hivyo muda mrefu hadithi fupi, hii imekuwa kinachotokea kwa ajili yenu, moja kwa moja, 88 00:04:20,079 --> 00:04:22,140 chini ya Hood yote ya wakati huu. 89 00:04:22,140 --> 00:04:26,450 Na kinachotokea kwa kweli ni mara moja umefanya kukimbia Clang, au kwa njia ya 90 00:04:26,450 --> 00:04:29,150 Kufanya, wewe ni kupata ya kwanza, kutoka chanzo code, 91 00:04:29,150 --> 00:04:30,700 kinachojulikana mkutano wa lugha. 92 00:04:30,700 --> 00:04:35,210 Kisha Clang ni kuwabadili kusanyiko hili Lugha chini zeros na ndio. 93 00:04:35,210 --> 00:04:38,340 Na hii ni slide kwamba sisi ilianza mjadala wetu katika Wiki 0 juu - 94 00:04:38,340 --> 00:04:39,840 na kisha Wiki 1 juu. 95 00:04:39,840 --> 00:04:44,030 Na kisha hatimaye, wale zeros na ndio ni pamoja na zeros na ndio 96 00:04:44,030 --> 00:04:47,190 kutoka maktaba wale tumekuwa kuchukua kwa nafasi kama darasa la I / O au 97 00:04:47,190 --> 00:04:50,010 Kamba Library au hata Maktaba CS50. 98 00:04:50,010 --> 00:04:54,200 >> Hivyo kwa rangi hii picha zaidi kuibua, tuna hello.c. 99 00:04:54,200 --> 00:04:57,220 Na, bila shaka, anatumia printf kazi ya kusema, hello dunia. 100 00:04:57,220 --> 00:05:01,810 hatua ya mkusanyiko inachukua ni chini ya kwamba faili sisi tu kuona hello.s, hata 101 00:05:01,810 --> 00:05:04,290 ingawa hiyo ni kawaida ilifutwa moja kwa moja kwa ajili yenu. 102 00:05:04,290 --> 00:05:06,050 Lakini hiyo ni kanuni ya kanisa katika hatua ya katikati. 103 00:05:06,050 --> 00:05:09,750 Na wakati sisi kukusanyika mkutano lugha, hivyo kusema, kwamba wakati wewe 104 00:05:09,750 --> 00:05:10,830 kupata zeros hizo na zile. 105 00:05:10,830 --> 00:05:13,920 Hivyo tumekuwa zoomed katika ufanisi leo juu ya nini tumekuwa kuchukua kwa nafasi, 106 00:05:13,920 --> 00:05:16,430 ina maana ya kwenda chanzo kanuni ya kupinga kanuni. 107 00:05:16,430 --> 00:05:18,850 >> Lakini mwishowe, sasa kwamba picha hiyo - hebu shove ni juu ya 108 00:05:18,850 --> 00:05:20,020 mkono wa kushoto upande. 109 00:05:20,020 --> 00:05:22,880 Na kutambua kwamba katika juu kuna Nilivyoeleza stdio.h. 110 00:05:22,880 --> 00:05:25,030 Hiyo ni faili kwamba tumekuwa pamoja katika karibu wote wa 111 00:05:25,030 --> 00:05:26,250 mipango tumekuwa imeandikwa. 112 00:05:26,250 --> 00:05:28,830 Na kwamba faili ambaye yaliyomo kupata nakala pasted, 113 00:05:28,830 --> 00:05:30,350 ufanisi atop code yako. 114 00:05:30,350 --> 00:05:34,170 Lakini zinageuka kuwa, kwenye kompyuta mfumo mahali fulani, kuna labda 115 00:05:34,170 --> 00:05:39,150 stdio.c faili kwamba mtu aliandika miaka iliyopita kwamba zana zote za 116 00:05:39,150 --> 00:05:41,870 kazi ambayo yalitangazwa katika stdio.h. 117 00:05:41,870 --> 00:05:45,465 >> Sasa katika hali halisi ni pengine si juu ya Mac au PC yako au hata katika 118 00:05:45,465 --> 00:05:47,660 CS50 appliance ni mbichi C kanuni. 119 00:05:47,660 --> 00:05:52,710 Mtu tayari ulioandaliwa ni pamoja na . O faili kwa ajili ya kitu au kanuni. 120 00:05:52,710 --> 00:05:56,020 faili, ambayo inahusu maktaba pamoja kwamba imekuwa kabla ya imewekwa na 121 00:05:56,020 --> 00:05:57,240 kabla ya ulioandaliwa kwa ajili yenu. 122 00:05:57,240 --> 00:06:01,950 Lakini tuseme kwamba kuna kweli ipo kwenye kompyuta yetu stdio.c sambamba 123 00:06:01,950 --> 00:06:02,650 na Clang. 124 00:06:02,650 --> 00:06:04,960 Kificho wako wa kuwa compiled na wamekusanyika. 125 00:06:04,960 --> 00:06:09,200 kanuni stdio.c 's ni kuwa ulioandaliwa na wamekusanyika, kwa hivyo hili sana mwisho 126 00:06:09,200 --> 00:06:13,730 hatua, hapa chini, inabidi kwa namna fulani kiungo, hivyo kusema, zeros yako na wale 127 00:06:13,730 --> 00:06:18,430 na yake zeros na ndio katika moja rahisi mpango ni kwamba hatimaye 128 00:06:18,430 --> 00:06:20,540 kuitwa tu Hello. 129 00:06:20,540 --> 00:06:23,340 >> Hivyo hiyo yote ya uchawi kwamba ni yakitokea hivi sasa. 130 00:06:23,340 --> 00:06:26,430 Na itaendelea kuchukua hizi michakato kwa nafasi, lakini kutambua 131 00:06:26,430 --> 00:06:28,750 kuna mengi ya maelezo Juicy kinachoendelea chini ya hapo. 132 00:06:28,750 --> 00:06:31,920 Na hii ni nini hufanya yako kompyuta na Intel ndani 133 00:06:31,920 --> 00:06:33,940 hasa tofauti. 134 00:06:33,940 --> 00:06:37,020 >> Kadhalika kumbuka kwamba, kama ungependa kujiunga na sisi kwa chakula cha mchana Ijumaa hii, kufanya kwenda 135 00:06:37,020 --> 00:06:41,570 kwa cs50.net/rsvp kawaida mahali, 1:15 Ijumaa hii. 136 00:06:41,570 --> 00:06:43,400 Na sasa matangazo machache. 137 00:06:43,400 --> 00:06:44,670 Hivyo tuna baadhi ya habari njema. 138 00:06:44,670 --> 00:06:45,970 Na tuna baadhi ya habari mbaya. 139 00:06:45,970 --> 00:06:47,260 Kuanza na baadhi ya habari nzuri hapa. 140 00:06:47,260 --> 00:06:52,038 141 00:06:52,038 --> 00:06:54,510 >> [Kuugua] 142 00:06:54,510 --> 00:06:54,710 >> Wote haki. 143 00:06:54,710 --> 00:06:56,670 Naam, ni kitaalam likizo, hivyo siyo sana zawadi kutoka kwetu. 144 00:06:56,670 --> 00:06:58,030 Lakini basi habari mbaya ya shaka. 145 00:06:58,030 --> 00:07:00,550 146 00:07:00,550 --> 00:07:01,880 >> [Kuugua] 147 00:07:01,880 --> 00:07:03,530 >> Mimi alitumia muda mwingi juu ya haya michoro. 148 00:07:03,530 --> 00:07:04,690 >> [Kicheko] 149 00:07:04,690 --> 00:07:07,000 >> Kutakuwa na kikao cha mapitio hii Jumatatu ijayo. 150 00:07:07,000 --> 00:07:08,340 Ni kwenda kuwa, saa 05:30. 151 00:07:08,340 --> 00:07:11,210 Sisi kuwakumbusha hayo maelezo yote kupitia barua pepe juu ya kozi 152 00:07:11,210 --> 00:07:13,470 tovuti katika michache tu ya muda siku. 153 00:07:13,470 --> 00:07:16,610 Itakuwa zingine na kufanywa kupatikana baada ya muda mfupi. 154 00:07:16,610 --> 00:07:19,200 Hivyo kama huwezi kufanya kwamba Jumatatu usiku yanayopangwa, msiwe na wasiwasi. 155 00:07:19,200 --> 00:07:22,270 Sehemu hii wiki ijayo mapenzi pia kuzingatia marekebisho kwa jaribio. 156 00:07:22,270 --> 00:07:25,670 Kama sehemu yako ni siku ya Jumatatu, ambayo ni kweli chuo kikuu likizo, sisi 157 00:07:25,670 --> 00:07:26,920 bado kukutana katika sehemu. 158 00:07:26,920 --> 00:07:28,890 Kama wewe tu hawezi kufanya kwamba sehemu kwa sababu wewe ni kwenda 159 00:07:28,890 --> 00:07:29,860 mbali, hiyo faini. 160 00:07:29,860 --> 00:07:33,710 Kuhudhuria Jumapili au Jumanne sehemu au tune-katika sehemu Jason, ambayo ni 161 00:07:33,710 --> 00:07:35,110 inapatikana online. 162 00:07:35,110 --> 00:07:37,490 >> Hivyo, zaidi ya habari mbaya. 163 00:07:37,490 --> 00:07:41,960 Hivyo kulingana na mtaala, tuna hotuba Ijumaa ijayo. 164 00:07:41,960 --> 00:07:43,690 Lakini habari njema - 165 00:07:43,690 --> 00:07:44,860 uwazi, Mimi alitumia muda mwingi sana juu ya hili. 166 00:07:44,860 --> 00:07:45,280 >> [Kicheko] 167 00:07:45,280 --> 00:07:47,140 >> Tutaweza kufuta ijayo mihadhara ya Ijumaa. 168 00:07:47,140 --> 00:07:50,590 Hivyo kwamba itakuwa zawadi kwa ajili yetu, hivyo unaweza kweli kuwa nzuri katika muhula 169 00:07:50,590 --> 00:07:52,990 kati ya wiki hii na wiki mbili hapa. 170 00:07:52,990 --> 00:07:57,460 Hivyo hakuna mihadhara wiki ijayo, tu vidogo Jaribio kidogo, ambayo unapaswa kuwa 171 00:07:57,460 --> 00:07:59,030 kupata inazidi msisimko. 172 00:07:59,030 --> 00:08:03,870 >> Basi hebu sasa kurejea mawazo yetu kwa kitu ambacho kwa kweli ni zaidi ya Visual 173 00:08:03,870 --> 00:08:06,990 na zaidi ya kusisimua na kuweka hatua kwa ajili ya nini kinaendelea kuwa kwenye upeo wa macho 174 00:08:06,990 --> 00:08:08,420 katika michache tu ya muda wa wiki. 175 00:08:08,420 --> 00:08:12,160 Baada ya jaribio la kwanza, tutaweza kugeuka lengo la tatizo letu seti mwingine 176 00:08:12,160 --> 00:08:16,710 domain maalum tatizo, ile ya forensics au usalama zaidi kwa ujumla. 177 00:08:16,710 --> 00:08:19,550 >> Kwa kweli, mila na tatizo hili kuweka ni kwa ajili yangu moja ya 178 00:08:19,550 --> 00:08:24,850 kufundisha wenzao au CAS kutembea katika chuo kuchukua picha ya baadhi ya 179 00:08:24,850 --> 00:08:29,450 zinazotambulika lakini si dhahiri watu, maeneo, au vitu, kisha kila mwaka mimi 180 00:08:29,450 --> 00:08:34,520 namna fulani kusimamia na ajali kufuta au kuharibu kadi digital vyombo vya habari 181 00:08:34,520 --> 00:08:35,720 kwamba ndani ya kamera yetu. 182 00:08:35,720 --> 00:08:36,860 Lakini hakuna mpango mkubwa. 183 00:08:36,860 --> 00:08:39,200 Siwezi kwenda mbele na kuziba kwamba katika kompyuta yangu. 184 00:08:39,200 --> 00:08:43,010 Siwezi kufanya sanamu ya kuchunguza mauaji ya hivyo, hivyo kusema, kwa kuiga zeros na 185 00:08:43,010 --> 00:08:46,830 ndio mbali ya kadi ya kwamba kumbukumbu, kama yake ya kadi ya SD au au kadi Compact flash 186 00:08:46,830 --> 00:08:48,100 chochote wewe ni ukoo na. 187 00:08:48,100 --> 00:08:49,300 Na kisha tunaweza mkono kwamba nje. 188 00:08:49,300 --> 00:08:53,190 >> Na hivyo changamoto mbele, kati ya mengine mambo kwa ajili yenu, itakuwa kuandika 189 00:08:53,190 --> 00:08:58,630 C kificho kwamba recovers rundo zima la JPEGs kwa ajili yangu na umebaini kuwa 190 00:08:58,630 --> 00:09:00,190 wale watu, mahali, au mambo. 191 00:09:00,190 --> 00:09:03,340 Na tutaweza pia kuzungumza, katika tatizo hili kuweka na katika siku zijazo, kuhusu 192 00:09:03,340 --> 00:09:04,440 graphics zaidi kwa ujumla. 193 00:09:04,440 --> 00:09:06,140 Tumekuwa kutumika kwao, bila shaka, kwa kuvunja nje. 194 00:09:06,140 --> 00:09:09,080 Lakini umefanya aina ya kuchukuliwa kwa nafasi kuna hizi ngazi ya juu fikra 195 00:09:09,080 --> 00:09:10,680 ya mistatili na ovals. 196 00:09:10,680 --> 00:09:12,450 Lakini chini ya Hood kuna saizi. 197 00:09:12,450 --> 00:09:14,370 Na wewe alikuwa na kuanza kufikiri juu ya hayo. 198 00:09:14,370 --> 00:09:18,800 Au wewe kwa ajili ya p-seti 4 na kufikiri kuhusu pengo kati ya matofali yako, jinsi 199 00:09:18,800 --> 00:09:21,990 haraka wewe ni mpira ni kusonga hela screen kwa kuvunja nje. 200 00:09:21,990 --> 00:09:24,830 Hivyo kuna wazo hili la dots juu ya screen yako kwamba ni 201 00:09:24,830 --> 00:09:26,290 kuja kucheza tayari. 202 00:09:26,290 --> 00:09:29,430 >> Sasa nini kuona, ingawa, ni nini kupata kwenye screen ya kompyuta. 203 00:09:29,430 --> 00:09:33,680 Kama ve milele watched baadhi nzuri au TV mbaya, ni tabia mbaya wao pretty much 204 00:09:33,680 --> 00:09:36,280 kutibu watazamaji kama technophobes ambao si kweli 205 00:09:36,280 --> 00:09:37,630 kujua mengi kuhusu kompyuta. 206 00:09:37,630 --> 00:09:40,840 Na hivyo ni rahisi sana kwa ajili ya polisi upelelezi kusema, unaweza 207 00:09:40,840 --> 00:09:41,710 safi kuwa hadi kwa ajili yangu? 208 00:09:41,710 --> 00:09:42,710 Au kuboresha, haki? 209 00:09:42,710 --> 00:09:45,550 Kuongeza ni kama neno buzz katika yoyote zaidi uhalifu kuhusiana show. 210 00:09:45,550 --> 00:09:49,240 Na ukweli ni kama kuchukua sana blurry picha ya mtuhumiwa kufanya 211 00:09:49,240 --> 00:09:51,620 kitu mbaya, huwezi tu kuongeza yake. 212 00:09:51,620 --> 00:09:53,080 Huwezi kuvuta kubwa. 213 00:09:53,080 --> 00:09:56,350 Huwezi kuona katika glint ya mtu jicho waliofanya kwamba 214 00:09:56,350 --> 00:09:59,860 hasa uhalifu, licha ya maambukizi ya hii kwenye TV. 215 00:09:59,860 --> 00:10:04,110 >> Na hivyo na kwamba hebu kuwahamasisha kwamba tatizo ujao kuweka na mtazamo saa 216 00:10:04,110 --> 00:10:05,765 baadhi inaonyesha na ambayo wapate kuwa ukoo. 217 00:10:05,765 --> 00:10:06,500 >> [Video avspelning] 218 00:10:06,500 --> 00:10:07,835 >> -OK. 219 00:10:07,835 --> 00:10:09,956 Sasa, hebu kupata nzuri kuangalia wewe. 220 00:10:09,956 --> 00:10:17,060 221 00:10:17,060 --> 00:10:17,766 >> -Hold yake. 222 00:10:17,766 --> 00:10:18,658 Kukimbia kwamba nyuma. 223 00:10:18,658 --> 00:10:19,550 >> -Subiri dakika. 224 00:10:19,550 --> 00:10:21,580 Kwenda kulia. 225 00:10:21,580 --> 00:10:21,800 >> -Kuna. 226 00:10:21,800 --> 00:10:22,690 Kufungia kwamba. 227 00:10:22,690 --> 00:10:23,692 >> -Full screen. 228 00:10:23,692 --> 00:10:23,846 >> -OK. 229 00:10:23,846 --> 00:10:24,154 Kufungia kwamba. 230 00:10:24,154 --> 00:10:25,140 >> -Kaza juu ya kwamba, mapenzi ya? 231 00:10:25,140 --> 00:10:27,090 >> -Vector katika juu ya guy kwamba na gurudumu nyuma. 232 00:10:27,090 --> 00:10:29,730 >> -Zoom katika haki hapa kwenye doa hili. 233 00:10:29,730 --> 00:10:33,700 >> -Pamoja na vifaa vya kulia, imaged unaweza kuwa wazi kabisa na makali. 234 00:10:33,700 --> 00:10:34,490 >> -Ni nini hiyo? 235 00:10:34,490 --> 00:10:35,870 >> -Ni mpango kukuza. 236 00:10:35,870 --> 00:10:36,793 >> -Je, unaweza wazi kuwa hadi yoyote? 237 00:10:36,793 --> 00:10:38,560 >> -Mimi sijui. 238 00:10:38,560 --> 00:10:39,090 Hebu kuongeza yake. 239 00:10:39,090 --> 00:10:41,690 >> -Kuongeza kifungu-6. 240 00:10:41,690 --> 00:10:43,510 >> -I kuimarishwa undani na - 241 00:10:43,510 --> 00:10:44,456 >> -Nadhani kuna kutosha kuimarisha. 242 00:10:44,456 --> 00:10:45,402 Kutolewa kwa screen yangu. 243 00:10:45,402 --> 00:10:47,300 >> -Kuongeza kutafakari katika macho yake. 244 00:10:47,300 --> 00:10:49,330 >> -Hebu kukimbia hii kupitia video kukuza. 245 00:10:49,330 --> 00:10:50,340 >> -Edgar, unaweza kuongeza hii? 246 00:10:50,340 --> 00:10:52,320 >> -Hutegemea. 247 00:10:52,320 --> 00:10:54,290 >> -I've been kazi tafakari hii. 248 00:10:54,290 --> 00:10:55,560 >> -Mtu wa kutafakari. 249 00:10:55,560 --> 00:10:56,440 >> -Reflection. 250 00:10:56,440 --> 00:10:57,940 >> -Kuna tafakari ya uso wa mtu. 251 00:10:57,940 --> 00:10:58,860 >> -Kutafakari. 252 00:10:58,860 --> 00:10:59,710 >> -Kuna kutafakari. 253 00:10:59,710 --> 00:11:00,900 >> -Zoom katika juu ya kioo. 254 00:11:00,900 --> 00:11:03,500 >> -Unaweza kuona kutafakari. 255 00:11:03,500 --> 00:11:04,700 >> -Je, unaweza kuongeza picha kutoka hapa? 256 00:11:04,700 --> 00:11:05,700 >> -Je, unaweza kuimarisha haki yake hapa? 257 00:11:05,700 --> 00:11:06,500 >> -Je, unaweza kuongeza yake? 258 00:11:06,500 --> 00:11:07,380 >> -Je, unaweza kuongeza yake? 259 00:11:07,380 --> 00:11:08,190 >> -Je, tunaweza kuongeza hii? 260 00:11:08,190 --> 00:11:08,940 >> -Je, unaweza kuongeza yake? 261 00:11:08,940 --> 00:11:10,280 >> -Kushikilia pili, mimi itabidi kuongeza. 262 00:11:10,280 --> 00:11:11,570 >> -Zoom katika juu ya mlango. 263 00:11:11,570 --> 00:11:12,180 >> -X10. 264 00:11:12,180 --> 00:11:13,052 >> -Zoom. 265 00:11:13,052 --> 00:11:13,197 >> [Kicheko] 266 00:11:13,197 --> 00:11:14,360 >> Hoja-in 267 00:11:14,360 --> 00:11:15,100 >> -Subiri, kuacha. 268 00:11:15,100 --> 00:11:15,740 >> -Stop. 269 00:11:15,740 --> 00:11:16,290 >> -Pause yake. 270 00:11:16,290 --> 00:11:19,390 >> -Mzunguko digrii 75 kote wima tafadhali. 271 00:11:19,390 --> 00:11:19,886 >> [Kicheko] 272 00:11:19,886 --> 00:11:24,350 >> -Stop, na nyuma ya sehemu kuhusu mlango tena. 273 00:11:24,350 --> 00:11:26,330 >> -Got enhancer picha kwamba unaweza bitmap? 274 00:11:26,330 --> 00:11:28,990 >> -Labda tunaweza kutumia Sen Pradeep njia ya kuona katika madirisha. 275 00:11:28,990 --> 00:11:30,680 >> -Hii ni programu ya hali ya sanaa. 276 00:11:30,680 --> 00:11:31,676 >> Za thamani ya icon ni mbali. 277 00:11:31,676 --> 00:11:34,166 >> -Na macho haki ya algorithms. 278 00:11:34,166 --> 00:11:38,399 >> -Yeye kuchukuliwa algorithms kuja kwa ngazi ya pili na mimi unaweza kuzitumia ili 279 00:11:38,399 --> 00:11:38,648 kuongeza hii picha. 280 00:11:38,648 --> 00:11:42,050 >> -Lock juu na kupanua z-mhimili. 281 00:11:42,050 --> 00:11:42,760 >> -Kuongeza. 282 00:11:42,760 --> 00:11:43,060 >> -Kuongeza. 283 00:11:43,060 --> 00:11:43,760 >> -Kuongeza. 284 00:11:43,760 --> 00:11:45,010 >> -Freeze na kuongeza. 285 00:11:45,010 --> 00:11:47,470 286 00:11:47,470 --> 00:11:47,910 >> [MWISHO video avspelning] 287 00:11:47,910 --> 00:11:51,470 >> DAVID J. Malan: Hivyo Tatizo Set 5 ni kile uongo mbele huko. 288 00:11:51,470 --> 00:11:55,260 Hivyo tutaweza karibuni kupata uelewa bora ya wakati na kwa nini unaweza 289 00:11:55,260 --> 00:11:57,300 na yetu haiwezi kuongeza katika njia hiyo. 290 00:11:57,300 --> 00:12:00,090 Lakini kwanza, hebu kurudi tahadhari yetu kwa baadhi ya vitalu jengo tutaweza 291 00:12:00,090 --> 00:12:02,250 haja ya kuwa na uwezo wa kuwaambia kwamba hadithi. 292 00:12:02,250 --> 00:12:05,580 >> Hivyo kukumbuka kuwa sisi akauchomoa hii picha kwenye Jumatatu na kidogo wiki iliyopita. 293 00:12:05,580 --> 00:12:09,970 Na hii inaelezea mpangilio wa mambo katika kumbukumbu ya kompyuta yako wakati 294 00:12:09,970 --> 00:12:11,000 mbio baadhi mpango. 295 00:12:11,000 --> 00:12:14,310 sehemu tech juu juu, kukumbuka, inahusu kwa zeros halisi na ndio 296 00:12:14,310 --> 00:12:16,000 ambayo kutunga programu yako. 297 00:12:16,000 --> 00:12:19,340 Kuna, chini ya kwamba, au baadhi ya initialized uninitialized data, ambayo kwa kawaida 298 00:12:19,340 --> 00:12:22,910 inahusu mambo kama constants au masharti au vigezo kimataifa kwamba kuwa 299 00:12:22,910 --> 00:12:24,200 imetangazwa mapema. 300 00:12:24,200 --> 00:12:26,500 Kuna lundo, lakini tutaweza kuja nyuma na kwamba katika kidogo. 301 00:12:26,500 --> 00:12:27,410 >> Na kisha kuna stack. 302 00:12:27,410 --> 00:12:30,660 Kiasi kama mkusanyiko wa sania katika mkahawa, hii ni wapi anapata kumbukumbu 303 00:12:30,660 --> 00:12:33,610 layered na layered wakati wowote kufanya nini katika mpango? 304 00:12:33,610 --> 00:12:36,380 305 00:12:36,380 --> 00:12:37,730 Kile ni matumizi stack kwa? 306 00:12:37,730 --> 00:12:39,320 >> Yeah? 307 00:12:39,320 --> 00:12:40,000 >> Wito wa kazi. 308 00:12:40,000 --> 00:12:42,890 Wakati wowote wewe piga kazi, ni aliyopewa Sliver ya kumbukumbu kwa ajili ya wake 309 00:12:42,890 --> 00:12:45,020 mitaa vigezo au vigezo wake. 310 00:12:45,020 --> 00:12:48,810 Na pictorially, tunaona kwamba kwa kila kazi mfululizo kuitwa, wakati 311 00:12:48,810 --> 00:12:52,520 B C wito wito wito D, wao kupata layered kwenye stack. 312 00:12:52,520 --> 00:12:55,630 Na ndani ya kila moja ya vipande wale wa kumbukumbu kimsingi ni upeo wa kipekee 313 00:12:55,630 --> 00:12:58,590 kwa ajili ya kazi kwamba, ambayo, bila shaka, ni tatizo kama unataka mkono 314 00:12:58,590 --> 00:13:01,850 kutokana na kazi moja hadi nyingine kipande ya data kwamba unataka 315 00:13:01,850 --> 00:13:03,500 mutate au kubadilika. 316 00:13:03,500 --> 00:13:08,060 >> Hivyo kile alikuwa ufumbuzi wetu kuwezesha kazi kuwakilishwa na stack moja 317 00:13:08,060 --> 00:13:11,390 sura na mabadiliko ndani ya kumbukumbu wa mwingine sura ya stack? 318 00:13:11,390 --> 00:13:14,590 Jinsi ya kufanya wale majadiliano 12:58 mwingine? 319 00:13:14,590 --> 00:13:18,510 Hivyo kwa njia ya kuyatumia au anwani, ambayo, tena, tu kuelezea ambapo katika 320 00:13:18,510 --> 00:13:22,280 kumbukumbu, kwa njia ya maalum bite ya simu, hasa 321 00:13:22,280 --> 00:13:23,830 thamani inaweza kupatikana. 322 00:13:23,830 --> 00:13:26,860 Hivyo kukumbuka mara ya mwisho pia tuliendelea hadithi na inaonekana katika 323 00:13:26,860 --> 00:13:28,280 haki Buggy mpango. 324 00:13:28,280 --> 00:13:32,900 Na mpango huu ni Buggy kwa ajili ya wachache sababu, lakini inatia mashaka ni moja ya 325 00:13:32,900 --> 00:13:34,620 kwa sababu inashindwa kuangalia nini? 326 00:13:34,620 --> 00:13:39,111 327 00:13:39,111 --> 00:13:40,450 >> Yeah, inashindwa kuangalia pembejeo. 328 00:13:40,450 --> 00:13:41,870 Pole? 329 00:13:41,870 --> 00:13:43,880 >> Kama ni zaidi ya wahusika 12. 330 00:13:43,880 --> 00:13:47,260 Sana smartly, wakati wito memcopy, ambayo, kama jina linavyosema, tu 331 00:13:47,260 --> 00:13:50,630 nakala ya kumbukumbu kutoka hoja yake ya pili katika hoja yake ya kwanza. 332 00:13:50,630 --> 00:13:54,730 Hoja ya tatu, sana smartly, ni checked kuhakikisha kwamba huna 333 00:13:54,730 --> 00:13:59,400 nakala zaidi, katika kesi hii, urefu ya bar, idadi ya wahusika, 334 00:13:59,400 --> 00:14:03,810 ndani ya marudio, ambayo ni hii safu C. Lakini tatizo ni kwamba kile 335 00:14:03,810 --> 00:14:07,230 ikiwa C yenyewe si kubwa ya kutosha kushughulikia kwamba? 336 00:14:07,230 --> 00:14:09,900 Wewe ni kwenda na nakala ya simu ya ka kwamba tumekuwa aliyopewa. 337 00:14:09,900 --> 00:14:13,040 Lakini je, kweli kuwa zaidi ka kuliko wewe kuwa na chumba kwa ajili ya? 338 00:14:13,040 --> 00:14:16,770 >> Naam, hii mpango upumbavu tu upofu kuendelea na kuchukua chochote ni 339 00:14:16,770 --> 00:14:20,650 aliyopewa, hujambo backslash 0 ni kubwa kama kamba ni mfupi 340 00:14:20,650 --> 00:14:22,040 kutosha, kama tano chars. 341 00:14:22,040 --> 00:14:26,470 Lakini kama ni kweli 12 wahusika au 1,200 wahusika, tuliona wakati wa mwisho 342 00:14:26,470 --> 00:14:29,380 kwamba wewe ni kwenda tu kabisa overwrite kumbukumbu kwamba 343 00:14:29,380 --> 00:14:30,470 siyo wewe. 344 00:14:30,470 --> 00:14:34,390 Na mbaya zaidi kesi, kama wewe overwrite kwamba nyekundu sehemu pale kwamba sisi kuitwa 345 00:14:34,390 --> 00:14:35,380 kurudi anwani - 346 00:14:35,380 --> 00:14:38,370 hii ni tu ambapo kompyuta moja kwa moja, kwa ajili yenu, nyuma ya 347 00:14:38,370 --> 00:14:43,130 pazia, tucks mbali thamani ya 32-bit kwamba kuwakumbusha kwa nini anwani ni lazima 348 00:14:43,130 --> 00:14:47,080 kurudi wakati foo, hii kazi nyingine, inafanywa utekelezaji. 349 00:14:47,080 --> 00:14:49,320 Ni chembe mkate wa kila aina ambayo kuirudisha. 350 00:14:49,320 --> 00:14:52,490 Kama wewe overwrite kwamba, uwezekano, kama wewe ni mtu mbaya, unaweza hawakuweza 351 00:14:52,490 --> 00:14:54,750 uwezekano wa kuchukua mtu kompyuta. 352 00:14:54,750 --> 00:14:58,020 Na wewe utakuwa hakika ajali hiyo katika kesi nyingi. 353 00:14:58,020 --> 00:15:01,690 >> Sasa tatizo hii ilikuwa tu exacerbated kama sisi kuanza kuzungumza juu ya kumbukumbu 354 00:15:01,690 --> 00:15:03,010 usimamizi kwa ujumla zaidi. 355 00:15:03,010 --> 00:15:07,150 Na malloc, kwa ajili ya mgao kumbukumbu, ni kazi kwamba tunaweza kutumia kutenga 356 00:15:07,150 --> 00:15:11,260 kumbukumbu wakati hatujui mapema tupate haja ya baadhi ya. 357 00:15:11,260 --> 00:15:13,960 Hivyo, kwa mfano, kama mimi kurejea kwa appliance hapa. 358 00:15:13,960 --> 00:15:21,010 Na mimi kufungua kutoka hello2.c mara ya mwisho, kukumbuka mpango huu hapa, ambayo inaonekana 359 00:15:21,010 --> 00:15:23,500 kitu kidogo kama hii, tatu tu mistari - 360 00:15:23,500 --> 00:15:27,940 hali ya jina lako, basi kamba jina, upande wa kushoto, sawa GetString. 361 00:15:27,940 --> 00:15:29,690 Na kisha sisi magazeti ya nje, jina la mtumiaji. 362 00:15:29,690 --> 00:15:31,170 >> Hivyo hii ilikuwa super rahisi mpango. 363 00:15:31,170 --> 00:15:34,870 Kuwa wazi, napenda kwenda mbele na kufanya hujambo-2. 364 00:15:34,870 --> 00:15:36,680 Mimi naenda kufanya dot kufyeka hujambo-2. 365 00:15:36,680 --> 00:15:37,750 Eleza jina yako - 366 00:15:37,750 --> 00:15:38,140 Daudi. 367 00:15:38,140 --> 00:15:38,840 Kuingia. 368 00:15:38,840 --> 00:15:39,540 Hujambo Daudi. 369 00:15:39,540 --> 00:15:41,060 Inaonekana kazi OK. 370 00:15:41,060 --> 00:15:43,140 Lakini ni nini kweli kinachoendelea chini ya Hood hapa? 371 00:15:43,140 --> 00:15:44,670 Kwanza hebu peel nyuma tabaka fulani. 372 00:15:44,670 --> 00:15:48,380 Kamba ni kisawe tu tumekuwa barabara kwa nini? 373 00:15:48,380 --> 00:15:49,110 Char nyota. 374 00:15:49,110 --> 00:15:52,740 Basi hebu kufanya ni kidogo zaidi arcane lakini zaidi ya utaalamu sahihi kwamba hii 375 00:15:52,740 --> 00:15:55,570 ni nyota Char, ambayo ina maana kwamba jina, ndiyo, ni kutofautiana. 376 00:15:55,570 --> 00:15:59,920 Lakini nini jina maduka ni anwani ya Char, ambayo anahisi ajabu kidogo 377 00:15:59,920 --> 00:16:01,050 kwa sababu mimi nina kupata nyuma kamba. 378 00:16:01,050 --> 00:16:03,580 Nina kupata nyuma nyingi chars si Char. 379 00:16:03,580 --> 00:16:07,400 >> Lakini bila shaka, haja tu ya kwanza anuani ya Char ya kukumbuka ambapo 380 00:16:07,400 --> 00:16:08,870 kamba nzima ni kwa nini? 381 00:16:08,870 --> 00:16:12,700 Jinsi gani unaweza kufikiri ambapo mwisho wa kamba ni kujua mwanzo? 382 00:16:12,700 --> 00:16:13,630 sifuri backslash. 383 00:16:13,630 --> 00:16:17,260 Hivyo, pamoja na dalili hizo mbili, unaweza kufikiri kabla ya mwanzo na mwisho wa 384 00:16:17,260 --> 00:16:20,280 kamba yoyote ni, hivyo muda mrefu kama wao ni vizuri hutengenezwa kwa null kwamba 385 00:16:20,280 --> 00:16:22,110 Terminator, kwamba sifuri backslash. 386 00:16:22,110 --> 00:16:24,520 >> Lakini hii ni wito GetString. 387 00:16:24,520 --> 00:16:28,020 Na zinageuka kuwa GetString muda wote huu imekuwa aina ya 388 00:16:28,020 --> 00:16:28,820 cheating kwa ajili yetu. 389 00:16:28,820 --> 00:16:32,460 Imekuwa ni kufanya hii kazi, kuwa na uhakika, kupata kamba kutoka mtumiaji. 390 00:16:32,460 --> 00:16:34,580 Lakini ambapo wa kumbukumbu kwamba wamekuwa kuja kutoka? 391 00:16:34,580 --> 00:16:38,440 Kama sisi kurudi nyuma kwa picha hapa na kuomba ufafanuzi kutoka tu 392 00:16:38,440 --> 00:16:42,610 wakati iliyopita, kwamba ni stack ambapo kumbukumbu huenda wakati kazi ni wito, 393 00:16:42,610 --> 00:16:45,370 kwa mantiki kwamba, wakati wewe piga GetString, na kisha mimi aina katika 394 00:16:45,370 --> 00:16:50,900 D-A-V-I-D Kuingia, ambapo ni D-A-V-I-D backslash sifuri kuhifadhiwa, ya msingi ya 395 00:16:50,900 --> 00:16:53,480 hadithi tumekuwa alituambia mbali? 396 00:16:53,480 --> 00:16:55,190 >> Inaonekana kuwa katika stack, haki? 397 00:16:55,190 --> 00:16:58,120 Wakati wewe piga kupata kamba ya kupata kidogo kipande cha kumbukumbu juu ya stack. 398 00:16:58,120 --> 00:17:01,630 Hivyo anasimama kwa kufikiri kwamba D-A-V-I-D sifuri backslash ni kuhifadhiwa 399 00:17:01,630 --> 00:17:02,770 huko katika stack. 400 00:17:02,770 --> 00:17:07,680 Lakini kusubiri dakika, GetString anarudi kamba kwamba, ili kuzungumza, ambayo ina maana 401 00:17:07,680 --> 00:17:11,700 ni tray kutoka mkahawa ni kuchukuliwa mbali stack. 402 00:17:11,700 --> 00:17:14,560 Na sisi alisema mara ya mwisho kwamba haraka kama kazi anarudi, na kwamba wewe kuchukua 403 00:17:14,560 --> 00:17:20,109 tray, hivyo kusema, mbali stack, nini unaweza kudhani kuhusu mabaki ya 404 00:17:20,109 --> 00:17:21,819 kwamba kumbukumbu? 405 00:17:21,819 --> 00:17:25,160 Mimi aina ya redrew yao kama alama swali kwa sababu wao kwa ufanisi kuwa 406 00:17:25,160 --> 00:17:26,250 haijulikani maadili. 407 00:17:26,250 --> 00:17:29,500 Wanaweza kutumika tena wakati baadhi kazi ya pili ni kuitwa. 408 00:17:29,500 --> 00:17:31,870 >> Kwa maneno mengine, kama sisi kutokea kuwa hifadhi - 409 00:17:31,870 --> 00:17:34,350 Mimi itabidi kuchora picha ya haraka hapa ya stack. 410 00:17:34,350 --> 00:17:38,690 Kama sisi kutokea kwa kuwa na kuchora chini sehemu ya kumbukumbu yangu, na tutaweza kusema 411 00:17:38,690 --> 00:17:42,230 kwamba hii ni sehemu ya kumbukumbu ulichukua na kuu na labda ARG c na 412 00:17:42,230 --> 00:17:46,790 ARG v na kitu kingine chochote katika mpango, wakati GetString inaitwa, 413 00:17:46,790 --> 00:17:51,120 labda GetString anapata chunk ya kumbukumbu hapa. 414 00:17:51,120 --> 00:17:53,940 Na kisha D-A-V-I-D kwa namna fulani mwisho juu katika kazi hii. 415 00:17:53,940 --> 00:17:55,320 Na mimi nina kwenda oversimplify. 416 00:17:55,320 --> 00:18:00,050 Lakini hebu kudhani kwamba wake-D A-V-I-D backslash sifuri. 417 00:18:00,050 --> 00:18:03,500 Hivyo ka hii nyingi zinatumika katika frame kwa GetString. 418 00:18:03,500 --> 00:18:08,270 >> Lakini kwa haraka kama anarudi GetString, sisi Alisema mara ya mwisho kwamba kumbukumbu hii juu ya 419 00:18:08,270 --> 00:18:11,340 hapa kila inakuwa - woops! - 420 00:18:11,340 --> 00:18:14,270 yote inakuwa ufanisi kufutika. 421 00:18:14,270 --> 00:18:17,220 Na tunaweza kufikiria hili sasa kama swali alama sababu ambaye anajua 422 00:18:17,220 --> 00:18:18,720 nini kinaendelea kuwa ya kumbukumbu hiyo. 423 00:18:18,720 --> 00:18:22,130 Hakika, mimi mara nyingi sana kuwaita kazi chochote zaidi GetString. 424 00:18:22,130 --> 00:18:24,750 Na haraka kama mimi wito nyingine kazi kuliko GetString, labda si katika 425 00:18:24,750 --> 00:18:28,860 mpango huu hasa sisi tu inaonekana saa lakini baadhi ya wengine, hakika baadhi ya wengine 426 00:18:28,860 --> 00:18:34,180 kazi inaweza kuishia kuwa kutolewa doa hii ijayo katika stack. 427 00:18:34,180 --> 00:18:39,410 >> Hivyo haiwezi kuwa maduka GetString D-A-V-I-D juu ya stack kwa sababu napenda 428 00:18:39,410 --> 00:18:41,040 mara moja kupoteza huduma hiyo. 429 00:18:41,040 --> 00:18:43,720 Lakini tunajua wao GetString tu anarudi nini? 430 00:18:43,720 --> 00:18:47,220 Ni si kurudi mimi wahusika sita. 431 00:18:47,220 --> 00:18:51,090 Je, ni kwa kweli hakuwa kurudi twaona mara ya mwisho? 432 00:18:51,090 --> 00:18:52,480 anwani ya kwanza. 433 00:18:52,480 --> 00:18:56,650 Hivyo kwa namna fulani, wakati wewe kuitwa GetString, ni kugawa chunk ya kumbukumbu kwa 434 00:18:56,650 --> 00:18:59,620 kamba kwamba aina ya watumiaji na kisha kurudi na anwani yake. 435 00:18:59,620 --> 00:19:02,930 Na zinageuka kuwa wakati unataka kazi kutenga kumbukumbu katika hii 436 00:19:02,930 --> 00:19:08,390 njia na kurudi kwa mtu ambaye kuitwa kwamba kazi, anwani ya 437 00:19:08,390 --> 00:19:11,870 kwamba chunk ya kumbukumbu, wewe kabisa hawawezi kuiweka katika stack katika 438 00:19:11,870 --> 00:19:14,750 chini, kwa sababu functionally ni tu kwenda si kuwa wako sana 439 00:19:14,750 --> 00:19:17,800 haraka, hivyo pengine unaweza nadhani ambapo sisi ni pengine kwenda kuwatupia 440 00:19:17,800 --> 00:19:20,130 badala yake, lundo kinachojulikana. 441 00:19:20,130 --> 00:19:25,290 >> Hivyo kati ya chini ya kumbukumbu yako mpangilio na juu ya kumbukumbu yako ya 442 00:19:25,290 --> 00:19:26,820 layout ni rundo zima la makundi. 443 00:19:26,820 --> 00:19:29,270 Moja ni stack, na haki ya hapo juu, ni chungu. 444 00:19:29,270 --> 00:19:33,680 Na lundo ni chunk tofauti ya kumbukumbu kwamba si kutumika kwa ajili ya kazi 445 00:19:33,680 --> 00:19:34,770 wakati wao ni kuitwa. 446 00:19:34,770 --> 00:19:38,100 Ni kutumika kwa ajili ya kumbukumbu ya muda mrefu, wakati unataka moja ya kazi kwa kunyakua baadhi ya 447 00:19:38,100 --> 00:19:42,700 kumbukumbu na kuwa na uwezo wa hutegemea ni bila ya kupoteza udhibiti juu yake. 448 00:19:42,700 --> 00:19:45,550 >> Sasa unaweza labda mara moja kuona kwamba hii si 449 00:19:45,550 --> 00:19:48,060 lazima kubuni kamilifu. 450 00:19:48,060 --> 00:19:51,350 Kama mpango wako zilizotengwa kumbukumbu kwenye stack, au kama wewe piga zaidi na 451 00:19:51,350 --> 00:19:55,540 zaidi kazi, au kama wewe kutenga kumbukumbu juu ya lundo na malloc mbali kama 452 00:19:55,540 --> 00:20:00,690 GetString ni kufanya, nini wazi inaonekana kuwa kuepukika tatizo? 453 00:20:00,690 --> 00:20:00,860 >> Haki. 454 00:20:00,860 --> 00:20:03,150 Kama ukweli kwamba haya mishale ni akizungumzia kwa kila mmoja 455 00:20:03,150 --> 00:20:04,380 hakuendani. 456 00:20:04,380 --> 00:20:08,630 Na kwa kweli, tunaweza haraka sana ajali mpango katika idadi yoyote ya njia. 457 00:20:08,630 --> 00:20:12,050 Kwa kweli, nadhani tuwe na kufanyika hii ajali mara moja. 458 00:20:12,050 --> 00:20:14,020 Au kama si hivyo, hebu kufanya hivyo makusudi sasa. 459 00:20:14,020 --> 00:20:21,330 Hebu kwenda mbele na kuandika super haraka programu inayoitwa dontdothis.c. 460 00:20:21,330 --> 00:20:26,730 Na sasa nitakwenda katika hapa na wala mkali pamoja stdio.h. 461 00:20:26,730 --> 00:20:32,620 Hebu kutangaza kazi foo inachukua hakuna hoja, ambayo ni 462 00:20:32,620 --> 00:20:34,040 ulionyehsa pamoja na utupu. 463 00:20:34,040 --> 00:20:37,830 >> Na kitu pekee foo ni kwenda kufanya ni wito foo, ambayo pengine si 464 00:20:37,830 --> 00:20:39,100 smartest wazo, lakini na iwe hivyo. 465 00:20:39,100 --> 00:20:40,490 Ent kuu utupu. 466 00:20:40,490 --> 00:20:45,270 Sasa kitu pekee kuu ni kwenda kufanya ni kuwaita foo pia. 467 00:20:45,270 --> 00:20:51,050 Na tu kwa mateke, mimi nina kwenda mbele hapa na kusema printf "Hello kutoka 468 00:20:51,050 --> 00:20:52,340 foo. " 469 00:20:52,340 --> 00:20:52,890 >> OK. 470 00:20:52,890 --> 00:21:00,160 Hivyo kama mimi si kufanya makosa yoyote, Kufanya dontdothis dot kufyeka. 471 00:21:00,160 --> 00:21:01,960 Na hebu kufanya hivyo katika dirisha kubwa - 472 00:21:01,960 --> 00:21:03,210 dot kufyeka, dontdothis. 473 00:21:03,210 --> 00:21:07,590 474 00:21:07,590 --> 00:21:08,840 Kuja juu. 475 00:21:08,840 --> 00:21:10,940 476 00:21:10,940 --> 00:21:11,890 Uh oh. 477 00:21:11,890 --> 00:21:13,100 Inavyoonekana, unaweza kufanya hivyo. 478 00:21:13,100 --> 00:21:15,190 Damn it. 479 00:21:15,190 --> 00:21:16,190 OK. 480 00:21:16,190 --> 00:21:16,580 Kusubiri. 481 00:21:16,580 --> 00:21:17,370 Kusimama kwa. 482 00:21:17,370 --> 00:21:18,270 Je, sisi - 483 00:21:18,270 --> 00:21:20,110 Hatukuwa kutumia kwa kufanya. 484 00:21:20,110 --> 00:21:22,050 >> [Anapumua] 485 00:21:22,050 --> 00:21:25,110 >> Najua lakini nadhani sisi tu kwamba imefutwa. 486 00:21:25,110 --> 00:21:28,410 Uh, yeah. 487 00:21:28,410 --> 00:21:30,660 Damn it. 488 00:21:30,660 --> 00:21:32,640 Kutatua Rob. 489 00:21:32,640 --> 00:21:34,678 Nini? 490 00:21:34,678 --> 00:21:35,928 Ni rahisi sana. 491 00:21:35,928 --> 00:21:43,820 492 00:21:43,820 --> 00:21:47,360 Yeah, sisi akageuka optimization mbali. 493 00:21:47,360 --> 00:21:48,970 OK, kusimama bye. 494 00:21:48,970 --> 00:21:49,950 Sasa mimi kujisikia vizuri. 495 00:21:49,950 --> 00:21:51,390 OK. 496 00:21:51,390 --> 00:21:51,780 Wote haki. 497 00:21:51,780 --> 00:21:53,430 >> Basi hebu recompile hii - 498 00:21:53,430 --> 00:21:55,880 Kufanya wewe dontdothis. 499 00:21:55,880 --> 00:22:00,090 Unaweza kuwa na kubadili jina hili dothis.c katika muda tu. 500 00:22:00,090 --> 00:22:00,710 Kuna sisi kwenda. 501 00:22:00,710 --> 00:22:01,240 Asante. 502 00:22:01,240 --> 00:22:02,050 OK. 503 00:22:02,050 --> 00:22:05,480 Hivyo ukweli kwamba nilikuwa kuchapa kitu nje alikuwa kweli tu 504 00:22:05,480 --> 00:22:08,150 kupunguza kasi ya mchakato na ambayo sisi ingekuwa kufikiwa kwamba uhakika. 505 00:22:08,150 --> 00:22:08,510 OK. 506 00:22:08,510 --> 00:22:08,870 Phew! 507 00:22:08,870 --> 00:22:11,180 >> Hivyo ni nini hasa kinachoendelea? 508 00:22:11,180 --> 00:22:14,440 sababu kuna, kama tu kando, ni kufanya kitu chochote katika suala la pembejeo na 509 00:22:14,440 --> 00:22:17,270 pato huelekea kuwa polepole kwa sababu wewe kuwa na kuandika herufi kwa 510 00:22:17,270 --> 00:22:18,600 screen, Ina na kitabu. 511 00:22:18,600 --> 00:22:21,720 Hivyo muda mrefu hadithi fupi, alikuwa na mimi kwa kweli kilichotokea hivyo papara, tunataka kuwa 512 00:22:21,720 --> 00:22:23,260 kuona hii matokeo ya mwisho pia. 513 00:22:23,260 --> 00:22:26,220 Sasa kwa kuwa nilipata safari ya magazeti-ups, tunaona haki mbali. 514 00:22:26,220 --> 00:22:28,410 Hivyo ni kwa nini hili likitokea. 515 00:22:28,410 --> 00:22:31,300 Naam, maelezo rahisi, bila shaka, ni kwamba foo pengine lazima si 516 00:22:31,300 --> 00:22:32,500 kuwa wito yenyewe. 517 00:22:32,500 --> 00:22:34,470 >> Sasa kwa ujumla, hii ni recursion. 518 00:22:34,470 --> 00:22:36,970 Na sisi mawazo wiki kadhaa iliyopita kujirudia ni nzuri. 519 00:22:36,970 --> 00:22:40,330 Recursion ni njia hii ya kichawi ya kuonyesha mwenyewe super ufupi. 520 00:22:40,330 --> 00:22:41,400 Na ni kazi tu. 521 00:22:41,400 --> 00:22:45,060 Lakini kuna kipengele muhimu ya yote ya mipango ya kujirudia tumekuwa aliyesema 522 00:22:45,060 --> 00:22:48,260 kuhusu na inaonekana saa hivi sasa, ambayo ilikuwa kwamba walikuwa na nini? 523 00:22:48,260 --> 00:22:52,610 kesi ya msingi, ambayo ilikuwa ngumu baadhi coded kesi hiyo alisema katika baadhi ya hali 524 00:22:52,610 --> 00:22:56,210 wala kuwaita foo, ambayo ni wazi si kesi hapa. 525 00:22:56,210 --> 00:22:58,920 >> Hivyo kile ni kweli yanatokea katika suala la picha hii? 526 00:22:58,920 --> 00:23:01,790 Naam, wakati kuu wito foo, ni anapata kipande cha kumbukumbu. 527 00:23:01,790 --> 00:23:04,150 Wakati foo wito foo, anapata kipande cha kumbukumbu. 528 00:23:04,150 --> 00:23:06,430 Wakati foo wito foo, anapata kipande. 529 00:23:06,430 --> 00:23:07,080 Anapata kipande. 530 00:23:07,080 --> 00:23:08,120 Anapata kipande. 531 00:23:08,120 --> 00:23:09,460 Sababu foo ni kamwe kurudi. 532 00:23:09,460 --> 00:23:12,160 Sisi ni kamwe kufutwa mmoja wa wale muafaka kutoka stack. 533 00:23:12,160 --> 00:23:15,930 Hivyo sisi ni unavuma kupitia chungu, si kutaja ambaye anajua kile kingine, na 534 00:23:15,930 --> 00:23:19,600 sisi ni overstepping mipaka ya yetu ya kinachojulikana sehemu ya kumbukumbu. 535 00:23:19,600 --> 00:23:21,790 Kosa kwenda segmentation uongo. 536 00:23:21,790 --> 00:23:24,110 >> Hivyo suluhisho kuna wazi si kufanya hili. 537 00:23:24,110 --> 00:23:28,830 Lakini maana kubwa zaidi ni kwamba, ndiyo, kuna kabisa ni kikomo fulani, 538 00:23:28,830 --> 00:23:32,470 hata kama siyo vizuri defined, kama jinsi kazi nyingi unaweza kuwaita katika 539 00:23:32,470 --> 00:23:34,970 mpango, mara ngapi kazi wanaweza kupiga yenyewe. 540 00:23:34,970 --> 00:23:38,430 Hivyo hata kama tulivyofanya kuhubiri recursion kama jambo hili uwezekano wa kichawi 541 00:23:38,430 --> 00:23:41,870 michache ya wiki iliyopita kwa ajili ya sigma kazi, na wakati sisi kupata data 542 00:23:41,870 --> 00:23:45,270 miundo na CS50, utaona nyingine maombi kwa ajili ya hayo, siyo 543 00:23:45,270 --> 00:23:46,500 lazima kitu bora. 544 00:23:46,500 --> 00:23:50,070 Kwa sababu kama kazi ya wito yenyewe, wito yenyewe, hata kama kuna msingi 545 00:23:50,070 --> 00:23:54,860 kesi, kama huna hit kwamba kesi ya msingi kwa ajili ya 1000 au simu wito 10,000, na 546 00:23:54,860 --> 00:23:58,800 kwamba wakati unaweza kuwa na kukimbia nje ya chumba juu ya kinachojulikana yako stack na kibao 547 00:23:58,800 --> 00:24:00,400 baadhi ya makundi mengine ya kumbukumbu. 548 00:24:00,400 --> 00:24:03,950 Hivyo pia ni kubuni biashara-off kati ya ulimbwende na kati ya 549 00:24:03,950 --> 00:24:06,920 robustness ya fulani yako utekelezaji. 550 00:24:06,920 --> 00:24:10,780 >> Hivyo kuna mwingine upande wa chini au mwingine gotcha kwa nini tumekuwa 551 00:24:10,780 --> 00:24:11,720 wamekuwa wakifanya hivi sasa. 552 00:24:11,720 --> 00:24:12,980 Wakati mimi aitwaye GetString - 553 00:24:12,980 --> 00:24:15,120 napenda kwenda nyuma katika hujambo-2. 554 00:24:15,120 --> 00:24:18,170 Taarifa kwamba mimi nina wito GetString, ambayo ni ya kurudi anwani. 555 00:24:18,170 --> 00:24:20,730 Na sisi kudai leo kwamba anuani ni kutoka lundo. 556 00:24:20,730 --> 00:24:24,480 Na sasa mimi ni uchapishaji nje kamba katika anwani hiyo. 557 00:24:24,480 --> 00:24:27,000 Lakini tumekuwa kamwe kuitwa kinyume cha GetString. 558 00:24:27,000 --> 00:24:30,850 Tumekuwa kamwe alikuwa calll kazi kama ungetstring, ambapo mkono nyuma 559 00:24:30,850 --> 00:24:31,610 kwamba kumbukumbu. 560 00:24:31,610 --> 00:24:33,250 Lakini kusema ukweli sisi pengine ha. 561 00:24:33,250 --> 00:24:37,390 Kwa sababu kama sisi kuendelea kuuliza kompyuta kwa ajili ya kumbukumbu, kwa njia ya mtu kama 562 00:24:37,390 --> 00:24:40,830 GetString lakini kamwe kuwapa nyuma, hakika kwamba pia ni amefungwa na kusababisha 563 00:24:40,830 --> 00:24:42,970 matatizo ambapo sisi kukimbia nje ya kumbukumbu. 564 00:24:42,970 --> 00:24:46,140 >> Na kwa kweli, tunaweza kuangalia kwa ajili ya haya matatizo na zana mpya ambao matumizi 565 00:24:46,140 --> 00:24:47,640 ni fumbo kidogo na aina. 566 00:24:47,640 --> 00:24:50,960 Lakini napenda kwenda mbele na kuzisambaza it up juu ya screen katika muda tu. 567 00:24:50,960 --> 00:24:56,940 Mimi nina kwenda mbele na kukimbia Valgrind na parameter ambao kwanza amri 568 00:24:56,940 --> 00:25:00,260 line Hoja ni jina ya kwamba mpango hujambo-2. 569 00:25:00,260 --> 00:25:02,650 Na kwa bahati mbaya ni pato ni atrociously 570 00:25:02,650 --> 00:25:04,290 tata kwa sababu hakuna nzuri. 571 00:25:04,290 --> 00:25:06,280 Hivyo tunaona kwamba fujo zote. 572 00:25:06,280 --> 00:25:07,530 Daudi ni hali ya jina langu. 573 00:25:07,530 --> 00:25:09,760 Hivyo kwamba ni mpango kweli mbio. 574 00:25:09,760 --> 00:25:11,180 Na sasa sisi kupata hii pato. 575 00:25:11,180 --> 00:25:13,400 >> Hivyo Valgrind ni sawa katika roho kwa GDB. 576 00:25:13,400 --> 00:25:14,950 Siyo debugger per se. 577 00:25:14,950 --> 00:25:16,270 Lakini ni kusahihisha kumbukumbu. 578 00:25:16,270 --> 00:25:20,140 Ni mpango ambayo kukimbia yako mpango na kukuambia kama wewe aliuliza 579 00:25:20,140 --> 00:25:23,860 kompyuta kwa ajili ya kumbukumbu na kamwe kukabidhiwa nyuma, na hivyo kwa maana ya kuwa una 580 00:25:23,860 --> 00:25:24,570 uvujaji wa kumbukumbu. 581 00:25:24,570 --> 00:25:26,240 Na kumbukumbu uvujaji huwa na kuwa mbaya. 582 00:25:26,240 --> 00:25:29,120 Na wewe ni watumiaji wa kompyuta na pengine waliona hii, kama una 583 00:25:29,120 --> 00:25:30,300 Mac au PC. 584 00:25:30,300 --> 00:25:33,730 Je, umewahi kutumia kompyuta yako kwa wakati na si rebooted katika baadhi ya 585 00:25:33,730 --> 00:25:36,820 siku, au ve tu got mengi ya kuendesha programu, na jambo damn 586 00:25:36,820 --> 00:25:42,360 kupungua kwa mguu kusaga, au angalau ni super annoying kutumia, kwa sababu 587 00:25:42,360 --> 00:25:44,350 kila kitu tu got super polepole. 588 00:25:44,350 --> 00:25:46,260 >> Sasa kwamba unaweza kuwa na idadi yoyote ya sababu. 589 00:25:46,260 --> 00:25:49,600 Ni inaweza kuwa kitanzi usio, mdudu katika kanuni ya mtu, au, zaidi tu, ni 590 00:25:49,600 --> 00:25:53,250 inaweza kuwa na maana kwamba wewe ni kutumia zaidi kumbukumbu, au kujaribu, kuliko yako 591 00:25:53,250 --> 00:25:54,920 kompyuta kweli ana. 592 00:25:54,920 --> 00:25:57,770 Na labda kuna mdudu katika mpango wa baadhi ya kwamba kuendelea kuuliza kwa kumbukumbu. 593 00:25:57,770 --> 00:26:02,480 Browsers kwa miaka walikuwa sifa mbaya kwa hii, kuomba kwa ajili ya kumbukumbu zaidi na zaidi 594 00:26:02,480 --> 00:26:03,870 lakini kamwe kuwapatia nyuma. 595 00:26:03,870 --> 00:26:07,220 Hakika, kama wewe tu na finite kiasi cha kumbukumbu, huwezi kuuliza 596 00:26:07,220 --> 00:26:09,990 kubwa mara nyingi kwa baadhi ya kumbukumbu hiyo. 597 00:26:09,990 --> 00:26:13,070 >> Na hivyo nini unaweza kuona hapa, ingawa tena pato Valgrind ni 598 00:26:13,070 --> 00:26:17,490 usiokuwa tata kwa mtazamo saa kwanza, hii ni sehemu ya kuvutia. 599 00:26:17,490 --> 00:26:18,890 Chungu - 600 00:26:18,890 --> 00:26:20,060 katika matumizi ya exit. 601 00:26:20,060 --> 00:26:22,810 Hivyo hapa ni kiasi gani kumbukumbu ilikuwa katika matumizi ya chungu katika 602 00:26:22,810 --> 00:26:24,300 wakati mpango wangu exited - 603 00:26:24,300 --> 00:26:27,280 inaonekana sita ka katika kuzuia moja. 604 00:26:27,280 --> 00:26:28,710 Hivyo nina kwenda kwa wimbi mikono yangu saa nini kuzuia ni. 605 00:26:28,710 --> 00:26:31,270 Fikiria ni tu chunk, zaidi kiufundi kwa ajili ya neno chunk. 606 00:26:31,270 --> 00:26:33,140 Lakini sita ka - 607 00:26:33,140 --> 00:26:36,870 kile ni ka sita ambayo walikuwa bado katika matumizi? 608 00:26:36,870 --> 00:26:37,390 >> Hasa. 609 00:26:37,390 --> 00:26:41,520 D-A-V-I-D backslash sifuri, tano barua jina plus Terminator null. 610 00:26:41,520 --> 00:26:46,350 Hivyo mpango huu Valgrind niliona kwamba mimi aliuliza kwa ka sita, inaonekana, na 611 00:26:46,350 --> 00:26:48,950 njia ya GetString, lakini kamwe akawapa nyuma. 612 00:26:48,950 --> 00:26:52,030 Na kwa kweli, hii inaweza kuwa hivyo dhahiri kama mpango wangu si tatu 613 00:26:52,030 --> 00:26:53,590 mistari, lakini ni 300 mistari. 614 00:26:53,590 --> 00:26:56,920 Ili tuweze kweli kutoa amri nyingine line hoja ya Valgrind kwa 615 00:26:56,920 --> 00:26:58,290 kufanya hivyo zaidi verbose. 616 00:26:58,290 --> 00:26:59,760 Ni kidogo annoying kukumbuka. 617 00:26:59,760 --> 00:27:01,580 Lakini kama mimi kufanya - 618 00:27:01,580 --> 00:27:01,930 hebu angalia. 619 00:27:01,930 --> 00:27:03,540 Leak - 620 00:27:03,540 --> 00:27:05,030 Ilikuwa ni kuvuja - 621 00:27:05,030 --> 00:27:07,580 hata sikumbuki ni nini mbali mkono. 622 00:27:07,580 --> 00:27:08,550 >> - Leak-hundi sawa kamili. 623 00:27:08,550 --> 00:27:10,180 Yep, asante. 624 00:27:10,180 --> 00:27:12,520 - Leak-hundi sawa kamili. 625 00:27:12,520 --> 00:27:13,800 Kuingia. 626 00:27:13,800 --> 00:27:14,940 Mpango huo ni mbio. 627 00:27:14,940 --> 00:27:16,180 Aina katika Daudi tena. 628 00:27:16,180 --> 00:27:17,660 Sasa naona kidogo zaidi kwa undani. 629 00:27:17,660 --> 00:27:20,890 Lakini chini ya muhtasari wa chungu, ambayo ni sawa na nne - ah, 630 00:27:20,890 --> 00:27:22,120 hii ni aina ya nzuri. 631 00:27:22,120 --> 00:27:25,460 Sasa Valgrind ni kweli kuangalia vigumu kidogo katika kanuni yangu. 632 00:27:25,460 --> 00:27:29,580 Na ni kusema kwamba, inaonekana, malloc katika line - 633 00:27:29,580 --> 00:27:30,580 sisi zoom nje. 634 00:27:30,580 --> 00:27:31,980 Katika line - 635 00:27:31,980 --> 00:27:32,930 hatuoni nini mstari ni. 636 00:27:32,930 --> 00:27:35,110 Lakini malloc ni culprit kwanza. 637 00:27:35,110 --> 00:27:38,630 Kuna blog katika malloc. 638 00:27:38,630 --> 00:27:39,810 >> Wote haki? 639 00:27:39,810 --> 00:27:40,450 OK, hakuna. 640 00:27:40,450 --> 00:27:40,940 Haki? 641 00:27:40,940 --> 00:27:42,520 Mimi kuitwa GetString. 642 00:27:42,520 --> 00:27:44,460 GetString inaonekana wito malloc. 643 00:27:44,460 --> 00:27:47,800 Hivyo kile mstari wa kanuni ni inaonekana katika kosa kwa kuwa na 644 00:27:47,800 --> 00:27:49,050 zilizotengwa kumbukumbu hii? 645 00:27:49,050 --> 00:27:51,560 646 00:27:51,560 --> 00:27:55,540 Hebu kudhani kuwa mtu aliandika malloc imekuwa karibu muda wa kutosha kwamba ni 647 00:27:55,540 --> 00:27:56,390 si kosa lao. 648 00:27:56,390 --> 00:27:57,520 Hivyo pengine mgodi. 649 00:27:57,520 --> 00:28:02,000 GetString katika cs50.c - hivyo kwamba ni faili mahali fulani kwenye kompyuta - 650 00:28:02,000 --> 00:28:05,210 katika mstari 286 inaonekana kuwa mhalifu. 651 00:28:05,210 --> 00:28:08,140 Sasa hebu kudhani kwamba cs50 imekuwa karibu kwa kiasi heshima ya muda, hivyo 652 00:28:08,140 --> 00:28:09,720 sisi pia ni dosari. 653 00:28:09,720 --> 00:28:14,080 Na hivyo pengine si katika GetString kwamba mdudu uongo, bali katika 654 00:28:14,080 --> 00:28:17,810 hujambo-2.c line 18. 655 00:28:17,810 --> 00:28:20,670 >> Basi hebu tuangalie nini kuwa mstari wa 18 ilikuwa. 656 00:28:20,670 --> 00:28:21,130 Oh. 657 00:28:21,130 --> 00:28:27,130 Namna fulani line hii si lazima Buggy, per se, lakini ni sababu 658 00:28:27,130 --> 00:28:28,630 nyuma kwamba uvujaji wa kumbukumbu. 659 00:28:28,630 --> 00:28:32,140 Hivyo super tu, gani shirikishi kuwa suluhisho hapa? 660 00:28:32,140 --> 00:28:34,710 Kama sisi ni kuuliza kwa ajili ya kumbukumbu, walikuwa kamwe kutoa ni nyuma, na kwamba inaonekana kuwa 661 00:28:34,710 --> 00:28:37,940 tatizo kwa sababu baada ya muda kompyuta yangu ili kukimbia nje ya kumbukumbu, ili kupunguza 662 00:28:37,940 --> 00:28:42,110 chini, mambo mabaya kinaweza kutokea, vizuri, nini rahisi ufumbuzi angavu? 663 00:28:42,110 --> 00:28:43,140 Kutoa tu nyuma. 664 00:28:43,140 --> 00:28:44,770 >> Jinsi gani unaweza bure juu ya kwamba kumbukumbu? 665 00:28:44,770 --> 00:28:49,970 Naam, nashiriki ni rahisi sana tu kusema jina bure. 666 00:28:49,970 --> 00:28:51,260 Na tumekuwa kamwe kufanyika hii kabla. 667 00:28:51,260 --> 00:28:55,890 Lakini unaweza kimsingi kufikiri ya bure kama kinyume cha malloc. 668 00:28:55,890 --> 00:28:58,030 bure ni kinyume cha kugawa kumbukumbu. 669 00:28:58,030 --> 00:28:59,540 Hivyo sasa napenda recompile hii. 670 00:28:59,540 --> 00:29:02,050 Kufanya hujambo-2. 671 00:29:02,050 --> 00:29:04,620 Basi mimi kukimbia tena. hujambo-2 Daudi. 672 00:29:04,620 --> 00:29:07,290 Hivyo inaonekana kufanya kazi katika hasa kwa njia hiyo. 673 00:29:07,290 --> 00:29:11,180 Lakini kama mimi kurejea Valgrind na kuendesha upya kwamba amri hiyo hiyo kwa wapya yangu 674 00:29:11,180 --> 00:29:14,720 ulioandaliwa mpango, kuandika kwa jina langu kama kabla - 675 00:29:14,720 --> 00:29:15,370 nzuri. 676 00:29:15,370 --> 00:29:16,760 Lundo muhtasari - 677 00:29:16,760 --> 00:29:17,740 katika matumizi ya exit - 678 00:29:17,740 --> 00:29:19,370 sifuri ka katika vitalu sifuri. 679 00:29:19,370 --> 00:29:21,840 Na hii ni super nzuri, kila vitalu lundo walikuwa huru. 680 00:29:21,840 --> 00:29:23,480 Hakuna uvujaji ni iwezekanavyo. 681 00:29:23,480 --> 00:29:27,200 >> Hivyo kuja juu, si kwa Tatizo Set 4, lakini pamoja na Tatizo Set 5, forensics 682 00:29:27,200 --> 00:29:30,740 na kuendelea, hii pia itakuwa kipimo cha usahihi wa yako 683 00:29:30,740 --> 00:29:33,630 mpango, kama au una au hawana uvujaji kumbukumbu. 684 00:29:33,630 --> 00:29:36,900 Lakini nashiriki, si tu unaweza kufikiri kupitia kwao intuitively, ambayo 685 00:29:36,900 --> 00:29:40,430 ni, arguably, rahisi kwa ajili ya programu ndogo lakini vigumu kwa ajili ya programu kubwa, 686 00:29:40,430 --> 00:29:43,860 Valgrind, kwa ajili ya programu hizo kubwa, wanaweza kukusaidia kutambua 687 00:29:43,860 --> 00:29:45,360 tatizo fulani. 688 00:29:45,360 --> 00:29:47,500 >> Lakini kuna tatizo moja nyingine ambayo yanaweza kina. 689 00:29:47,500 --> 00:29:51,245 Napenda kufungua faili hii hapa, ambayo ni, tena, mfano kiasi fulani rahisi. 690 00:29:51,245 --> 00:29:53,760 Lakini hebu kuzingatia nini mpango huu gani. 691 00:29:53,760 --> 00:29:55,190 Hii inaitwa memory.c. 692 00:29:55,190 --> 00:29:58,380 Tutaweza post hii leo baadaye katika zip ya chanzo kanuni ya leo. 693 00:29:58,380 --> 00:30:01,610 Na taarifa kwamba nina kazi kuitwa f kwamba inachukua hoja hakuna na 694 00:30:01,610 --> 00:30:02,800 anarudi chochote. 695 00:30:02,800 --> 00:30:07,240 Katika mstari wa 20, mimi nina inaonekana kutangaza pointer int na kuiita x. 696 00:30:07,240 --> 00:30:09,570 Mimi ni kumshirikisha kurudi thamani ya malloc. 697 00:30:09,570 --> 00:30:14,590 Na tu kuwa wazi, jinsi wengi ka am Mimi labda kupata nyuma kutoka malloc 698 00:30:14,590 --> 00:30:17,080 katika hali hii? 699 00:30:17,080 --> 00:30:18,040 >> Pengine 40. 700 00:30:18,040 --> 00:30:18,840 Wapi kupata kwamba kutoka? 701 00:30:18,840 --> 00:30:22,410 Naam, kama unakumbuka kwamba int mara nyingi ni 4 ka, angalau ni katika 702 00:30:22,410 --> 00:30:25,110 appliance, 10 mara 4 ni wazi kuwa ni 40. 703 00:30:25,110 --> 00:30:28,920 Hivyo malloc ni kurudi anwani ya chunk ya kumbukumbu na hifadhi ya kwamba 704 00:30:28,920 --> 00:30:30,800 kushughulikia hatimaye katika x. 705 00:30:30,800 --> 00:30:32,570 Hivyo kuwa wazi, nini basi kinachotokea? 706 00:30:32,570 --> 00:30:34,990 Vizuri, basi mimi kubadili nyuma na picha yetu hapa. 707 00:30:34,990 --> 00:30:38,150 Basi mimi si tu kuteka chini ya yangu kumbukumbu ya kompyuta, napenda kwenda mbele na 708 00:30:38,150 --> 00:30:42,990 kuteka Mstatili nzima kwamba inawakilisha yote ya RAM yangu. 709 00:30:42,990 --> 00:30:44,790 >> Tutaweza kusema kwamba stack ni juu ya chini. 710 00:30:44,790 --> 00:30:47,010 Na kuna sehemu ya asilia katika data uninitialized. 711 00:30:47,010 --> 00:30:49,880 Lakini nina kwenda tu abstract wale mambo mengine mbali kama dot, dot dot. 712 00:30:49,880 --> 00:30:53,470 Mimi tu kwenda kwa kutaja hii kama chungu kwa juu. 713 00:30:53,470 --> 00:30:57,070 Na kisha chini ya picha hii, kuwakilisha kuu, mimi naenda 714 00:30:57,070 --> 00:30:59,880 kuwapa kumbukumbu vipande juu ya stack. 715 00:30:59,880 --> 00:31:03,150 Kwa f, mimi naenda kuwapa kipande ya kumbukumbu juu ya stack. 716 00:31:03,150 --> 00:31:05,140 Sasa, mimi got kushauriana yangu chanzo kanuni tena. 717 00:31:05,140 --> 00:31:07,170 Je, ni vigezo mitaa kwa kuu? 718 00:31:07,170 --> 00:31:10,710 Inavyoonekana kitu, hivyo kipande kwamba ni ufanisi tupu au hata kama kubwa 719 00:31:10,710 --> 00:31:11,600 kama nimekuwa inayotolewa yake. 720 00:31:11,600 --> 00:31:15,730 Lakini katika f, nina kutofautiana za mitaa, ambayo inaitwa x. 721 00:31:15,730 --> 00:31:20,410 Hivyo nina kwenda mbele na kutoa f chunk ya kumbukumbu, wito ni x. 722 00:31:20,410 --> 00:31:24,680 >> Na sasa malloc ya mara 10 4, Hivyo malloc 40, ambapo kwamba 723 00:31:24,680 --> 00:31:25,430 kumbukumbu kutoka? 724 00:31:25,430 --> 00:31:27,530 Tumekuwa si kuchora picha kama hii kabla. 725 00:31:27,530 --> 00:31:31,140 Lakini hebu tuseme kwamba ni ufanisi kuja kutoka hapa, hivyo moja, 726 00:31:31,140 --> 00:31:33,170 mbili, tatu, nne, tano. 727 00:31:33,170 --> 00:31:34,680 Na sasa nahitaji 40 ya haya. 728 00:31:34,680 --> 00:31:37,540 Hivyo mimi itabidi kufanya dot, dot, dot zinaonyesha kwamba kuna hata zaidi ya kumbukumbu 729 00:31:37,540 --> 00:31:39,350 kurudi kutoka lundo. 730 00:31:39,350 --> 00:31:40,710 Sasa nini anuani? 731 00:31:40,710 --> 00:31:42,620 Hebu kuchagua holela wetu kushughulikia kama siku zote - 732 00:31:42,620 --> 00:31:46,310 Ox123, ingawa pengine ni kwenda kuwa ni kitu tofauti kabisa. 733 00:31:46,310 --> 00:31:50,420 Hiyo ni anuani ya Byte ya kwanza katika kumbukumbu kwamba mimi nina kuuliza malloc kwa. 734 00:31:50,420 --> 00:31:53,630 >> Hivyo katika line short, mara 20 executes, kile ni halisi 735 00:31:53,630 --> 00:31:57,170 kuhifadhiwa ndani ya x hapa? 736 00:31:57,170 --> 00:31:58,730 Ox123. 737 00:31:58,730 --> 00:32:00,370 Ox123. 738 00:32:00,370 --> 00:32:01,550 Na ng'ombe ni uninteresting. 739 00:32:01,550 --> 00:32:03,200 Ni tu ina maana hapa ni hexadesimoli idadi. 740 00:32:03,200 --> 00:32:06,490 Lakini nini muhimu ni kwamba kile nimekuwa kuhifadhi katika x, ambayo ni kutofautiana mitaa. 741 00:32:06,490 --> 00:32:10,260 Lakini sina data aina, tena, ni anwani ya int. 742 00:32:10,260 --> 00:32:12,710 Naam, mimi nina kwenda kuhifadhi Ox123. 743 00:32:12,710 --> 00:32:16,610 Lakini tena, kama kwamba ni kidogo sana ngumu usiokuwa, kama mimi kitabu 744 00:32:16,610 --> 00:32:21,490 nyuma, tunaweza abstract hii mbali kabisa sababu na kusema tu kwamba ni x 745 00:32:21,490 --> 00:32:23,910 pointer kwamba chunk ya kumbukumbu. 746 00:32:23,910 --> 00:32:24,070 >> OK. 747 00:32:24,070 --> 00:32:26,230 Sasa swali katika mkono ni yafuatayo - 748 00:32:26,230 --> 00:32:29,910 mstari 21, ni zamu nje, ni Buggy. 749 00:32:29,910 --> 00:32:31,160 Kwa nini? 750 00:32:31,160 --> 00:32:34,890 751 00:32:34,890 --> 00:32:36,930 >> Pole? 752 00:32:36,930 --> 00:32:38,640 Haina - 753 00:32:38,640 --> 00:32:40,390 kusema kwamba kwa mara nyingine. 754 00:32:40,390 --> 00:32:41,240 Naam, haina bure. 755 00:32:41,240 --> 00:32:42,350 Hivyo hiyo ni ya pili lakini. 756 00:32:42,350 --> 00:32:45,000 Hivyo kuna mtu mwingine lakini hasa katika mstari wa 21. 757 00:32:45,000 --> 00:32:49,480 758 00:32:49,480 --> 00:32:50,040 >> Hasa. 759 00:32:50,040 --> 00:32:54,980 Line hii rahisi ya kanuni ni tu buffer kufurika, overrun buffer. 760 00:32:54,980 --> 00:32:57,050 buffer tu ina maana chunk ya kumbukumbu. 761 00:32:57,050 --> 00:33:01,520 Lakini kwamba chunk ya kumbukumbu ni ya kawaida 10, 10 integers, ambayo ina maana kama sisi 762 00:33:01,520 --> 00:33:05,350 index ndani yake kwa kutumia sukari kisintaksia nukuu ya safu, mraba 763 00:33:05,350 --> 00:33:09,220 mabano, unaweza kupata x mabano mabano 0 x 1 x, 764 00:33:09,220 --> 00:33:10,390 bracket dot, dot, dot. 765 00:33:10,390 --> 00:33:13,270 x 9 mabano ni moja kubwa. 766 00:33:13,270 --> 00:33:17,680 Hivyo kama mimi kufanya x bracket 10, ambapo Mimi nina kweli kwenda katika kumbukumbu? 767 00:33:17,680 --> 00:33:19,120 >> Naam, kama nina 10 int - 768 00:33:19,120 --> 00:33:21,070 hebu kweli kuteka kila ya haya hapa. 769 00:33:21,070 --> 00:33:22,700 Ili kwamba ilikuwa mitano ya kwanza. 770 00:33:22,700 --> 00:33:24,660 Hapa ni nyingine tano ints. 771 00:33:24,660 --> 00:33:29,580 Hivyo x mabano 0 ni hapa. x mabano ni 1 hapa. x 9 mabano ni hapa. x bracket 772 00:33:29,580 --> 00:33:37,960 10 ni hapa, ambayo ina maana Mimi ninawaambia, katika mstari wa 21, kompyuta na kuweka 773 00:33:37,960 --> 00:33:39,400 simu wapi? 774 00:33:39,400 --> 00:33:42,010 idadi 0 wapi? 775 00:33:42,010 --> 00:33:43,380 Naam, ni 0, ndiyo. 776 00:33:43,380 --> 00:33:45,460 Lakini tu ukweli kwamba wake 0 ni aina ya bahati mbaya. 777 00:33:45,460 --> 00:33:47,140 Ni inaweza kuwa idadi 50, kwa ajili ya wote sisi huduma. 778 00:33:47,140 --> 00:33:50,480 Lakini sisi ni kujaribu kuiweka katika mabano x 10, ambayo ni ambapo hii 779 00:33:50,480 --> 00:33:53,700 alama ya swali ni inayotolewa, ambayo si jambo zuri. 780 00:33:53,700 --> 00:33:57,070 Mpango huu ili vizuri sana ajali kama matokeo. 781 00:33:57,070 --> 00:33:59,400 >> Sasa, hebu kwenda mbele na kuona kama hii ni kweli, nini kinatokea. 782 00:33:59,400 --> 00:34:02,600 Kufanya kumbukumbu, tangu faili inaitwa memory.c. 783 00:34:02,600 --> 00:34:05,950 Hebu kwenda mbele na kukimbia kumbukumbu mpango. 784 00:34:05,950 --> 00:34:08,239 Hivyo tulipata bahati, kweli, inaonekana. 785 00:34:08,239 --> 00:34:09,340 Tulipata bahati. 786 00:34:09,340 --> 00:34:11,060 Lakini hebu angalia kama sisi sasa kukimbia Valgrind. 787 00:34:11,060 --> 00:34:14,170 Kwa mtazamo wa kwanza, mpango wangu ili kuonekana kuwa sahihi kabisa. 788 00:34:14,170 --> 00:34:18,010 Lakini basi mimi kukimbia Valgrind na - Leak-hundi sawa na kamili juu ya kumbukumbu. 789 00:34:18,010 --> 00:34:20,110 >> Na sasa wakati mimi kukimbia hii - 790 00:34:20,110 --> 00:34:21,030 kuvutia. 791 00:34:21,030 --> 00:34:26,800 Batili kuandika ukubwa wa 4 katika mstari wa 21 memory.c. 792 00:34:26,800 --> 00:34:29,284 Mstari wa 21 memory.c ni ambayo moja? 793 00:34:29,284 --> 00:34:30,340 Oh, kuvutia. 794 00:34:30,340 --> 00:34:31,080 Lakini kusubiri. 795 00:34:31,080 --> 00:34:32,389 Ukubwa 4, nini ni kwamba mnayosema? 796 00:34:32,389 --> 00:34:34,969 Mimi tu hakuwa moja kuandika, lakini ni ya kawaida 4. 797 00:34:34,969 --> 00:34:36,889 Kwa nini ni 4? 798 00:34:36,889 --> 00:34:39,280 Ni kwa sababu ni int, ambayo ni, tena, nne ka. 799 00:34:39,280 --> 00:34:42,510 Hivyo Valgrind kupatikana mdudu kuwa mimi, glancing katika kanuni yangu, hakufanya hivyo. 800 00:34:42,510 --> 00:34:45,040 Na labda TF yako gani au bila. 801 00:34:45,040 --> 00:34:48,469 Lakini kile Valgrind kwa uhakika kupatikana kwamba tumekuwa alifanya kosa huko, hata 802 00:34:48,469 --> 00:34:52,719 ingawa tulipata bahati, na kompyuta aliamua, eh, mimi si kwenda kwa ajali 803 00:34:52,719 --> 00:34:57,470 kwa sababu tu wewe kuguswa moja Byte, moja yenye thamani ya int ya kumbukumbu kwamba hakuwa 804 00:34:57,470 --> 00:34:58,550 kweli mwenyewe. 805 00:34:58,550 --> 00:35:00,380 >> Naam, kile kingine ni Buggy hapa. 806 00:35:00,380 --> 00:35:01,180 Anwani - 807 00:35:01,180 --> 00:35:03,190 hii ni mambo ya kuangalia anuani katika hexadesimoli. 808 00:35:03,190 --> 00:35:06,890 Hiyo ina maana tu mahali fulani katika lundo ni sifuri ka baada ya kuzuia wa kawaida 40 809 00:35:06,890 --> 00:35:07,620 ni zilizotengwa. 810 00:35:07,620 --> 00:35:10,610 Hebu zoom nje hapa na kuona kama hii ni kidogo zaidi kusaidia. 811 00:35:10,610 --> 00:35:11,410 Kuvutia. 812 00:35:11,410 --> 00:35:15,600 Ka 40 ni dhahiri waliopotea katika hasara rekodi ya 1 ya 1. 813 00:35:15,600 --> 00:35:17,840 Tena, zaidi kuliko maneno ni muhimu hapa. 814 00:35:17,840 --> 00:35:21,350 Lakini kulingana na mistari yalionyesha, ambapo lazima mimi pengine kuzingatia yangu 815 00:35:21,350 --> 00:35:24,070 tahadhari kwa ajili ya mdudu mwingine? 816 00:35:24,070 --> 00:35:26,570 Inaonekana kama mstari 20 ya memory.c. 817 00:35:26,570 --> 00:35:30,990 >> Hivyo kama sisi kwenda nyuma ya mstari wa 20, kwamba ni moja kwamba kutambuliwa mapema. 818 00:35:30,990 --> 00:35:33,030 Na si lazima Buggy. 819 00:35:33,030 --> 00:35:35,160 Lakini sisi hii kuachwa madhara yake. 820 00:35:35,160 --> 00:35:38,790 Hivyo ni jinsi gani mimi kusahihisha angalau moja ya makosa hayo? 821 00:35:38,790 --> 00:35:42,240 Ningefanya nini baada ya mstari 21? 822 00:35:42,240 --> 00:35:47,110 Mimi naweza kufanya bure ya x, hivyo ni kutoa nyuma kwamba kumbukumbu. 823 00:35:47,110 --> 00:35:49,230 Na jinsi gani mimi kurekebisha hii mdudu? 824 00:35:49,230 --> 00:35:52,120 Mimi lazima dhahiri kwenda hakuna mbali zaidi kuliko 0. 825 00:35:52,120 --> 00:35:53,670 Hivyo basi mimi kujaribu na kuendesha upya hii. 826 00:35:53,670 --> 00:35:56,080 Samahani, dhahiri kwenda hakuna mbali zaidi kuliko 9. 827 00:35:56,080 --> 00:35:57,510 Kufanya kumbukumbu. 828 00:35:57,510 --> 00:36:00,650 Hebu rerun Valgrind katika dirisha kubwa. 829 00:36:00,650 --> 00:36:01,580 Na sasa kuangalia. 830 00:36:01,580 --> 00:36:02,250 Nice. 831 00:36:02,250 --> 00:36:03,270 Vitalu wote lundo walikuwa huru. 832 00:36:03,270 --> 00:36:04,270 Hakuna uvujaji ni iwezekanavyo. 833 00:36:04,270 --> 00:36:07,520 Na hadi hapo juu hapa, kuna hakuna kutaja yoyote zaidi ya haki batili. 834 00:36:07,520 --> 00:36:09,820 >> Tu kupata tamaa, na hebu kuona kama mwingine maandamano 835 00:36:09,820 --> 00:36:11,050 haina kwenda kama lengo - 836 00:36:11,050 --> 00:36:12,560 Sikuweza kupata bahati wakati iliyopita. 837 00:36:12,560 --> 00:36:15,530 Na ukweli kwamba hii ni 0 labda ni usiokuwa na kupotosha. 838 00:36:15,530 --> 00:36:20,650 Hebu tu kufanya 50, holela kiasi fulani simu, kufanya kumbukumbu dot kufyeka kumbukumbu - 839 00:36:20,650 --> 00:36:21,410 bado kupata bahati. 840 00:36:21,410 --> 00:36:22,510 Kitu ni crashing. 841 00:36:22,510 --> 00:36:26,150 Tuseme mimi tu kufanya kitu kweli wajinga, na mimi kufanya 100. 842 00:36:26,150 --> 00:36:30,360 Hebu remake kumbukumbu, dot kufyeka kumbukumbu - 843 00:36:30,360 --> 00:36:31,075 got bahati tena. 844 00:36:31,075 --> 00:36:32,800 Vipi kuhusu 1000? 845 00:36:32,800 --> 00:36:35,370 ints zaidi, takribani, ambapo mimi lazima? 846 00:36:35,370 --> 00:36:37,410 Kufanya kumbukumbu - 847 00:36:37,410 --> 00:36:38,570 damn it. 848 00:36:38,570 --> 00:36:39,920 >> [Kicheko] 849 00:36:39,920 --> 00:36:41,270 >> OK. 850 00:36:41,270 --> 00:36:43,920 Hebu si fujo karibu tena. 851 00:36:43,920 --> 00:36:45,120 Rerun kumbukumbu. 852 00:36:45,120 --> 00:36:45,840 Kuna sisi kwenda. 853 00:36:45,840 --> 00:36:46,410 Wote haki. 854 00:36:46,410 --> 00:36:52,500 Hivyo inaonekana wewe index ints 100,000 zaidi ambapo unapaswa kuwa katika 855 00:36:52,500 --> 00:36:54,410 kumbukumbu, mambo mabaya kutokea. 856 00:36:54,410 --> 00:36:56,430 Hivyo hii ni wazi si ngumu, kwa haraka utawala. 857 00:36:56,430 --> 00:36:58,190 Mimi ilikuwa aina ya kutumia kesi na makosa ya kufika huko. 858 00:36:58,190 --> 00:37:02,230 Lakini hii ni kwa sababu, kwa muda mrefu hadithi fupi, kumbukumbu ya kompyuta yako pia ni kugawanywa 859 00:37:02,230 --> 00:37:03,580 katika mambo haya kuitwa makundi. 860 00:37:03,580 --> 00:37:07,260 Na wakati mwingine, kompyuta kweli amewapa ninyi zaidi kidogo ya kumbukumbu 861 00:37:07,260 --> 00:37:08,400 kuliko wewe kuuliza. 862 00:37:08,400 --> 00:37:12,170 Lakini kwa ajili ya ufanisi, ni rahisi tu kupata kumbukumbu zaidi lakini tu kuwaambia 863 00:37:12,170 --> 00:37:13,780 kwamba wewe ni kupata sehemu yake. 864 00:37:13,780 --> 00:37:16,370 >> Na kama wewe kupata bahati wakati mwingine, kwa hiyo, unaweza kuwa na uwezo wa kugusa 865 00:37:16,370 --> 00:37:17,795 kumbukumbu kwamba siyo wewe. 866 00:37:17,795 --> 00:37:21,860 Wewe huna kuhakikisha kwamba thamani gani kuweka pale kukaa pale, kwa sababu 867 00:37:21,860 --> 00:37:25,080 kompyuta bado anadhani si yako, lakini siyo lazima kwenda 868 00:37:25,080 --> 00:37:29,910 kuikumba sehemu nyingine ya kumbukumbu katika kompyuta na kushawishi kosa kama 869 00:37:29,910 --> 00:37:31,710 hii moja hapa. 870 00:37:31,710 --> 00:37:32,060 Wote haki. 871 00:37:32,060 --> 00:37:37,240 Maswali yoyote basi juu ya kumbukumbu? 872 00:37:37,240 --> 00:37:37,590 >> Wote haki. 873 00:37:37,590 --> 00:37:40,610 Hebu tuangalie hapa, basi, katika kitu tumekuwa kuchukua kwa 874 00:37:40,610 --> 00:37:48,361 nafasi kwa muda kabisa, ambayo ni katika faili hii inaitwa cs50.h. 875 00:37:48,361 --> 00:37:49,420 Hivyo hii ni faili. 876 00:37:49,420 --> 00:37:51,130 Hizi ni baadhi tu rundo zima ya maoni juu juu. 877 00:37:51,130 --> 00:37:53,900 Na unaweza kuwa inaonekana saa hii kama wewe poked karibu juu ya appliance. 878 00:37:53,900 --> 00:37:57,000 Lakini zinageuka kuwa wakati wote, wakati sisi kutumika kwa kutumia kamba kama 879 00:37:57,000 --> 00:38:01,130 kisawe, njia ambayo sisi alitangaza kisawe kwamba alikuwa na hili 880 00:38:01,130 --> 00:38:03,990 Keyword typedef, kwa ajili ya ufafanuzi aina. 881 00:38:03,990 --> 00:38:07,500 Na sisi ni kimsingi akisema, kufanya kamba kisawe kwa nyota Char. 882 00:38:07,500 --> 00:38:11,190 Kwamba njia ambayo stack kuundwa magurudumu haya mafunzo inajulikana kama 883 00:38:11,190 --> 00:38:12,040 kamba. 884 00:38:12,040 --> 00:38:14,830 >> Sasa hapa ni mfano tu kwa getchar. 885 00:38:14,830 --> 00:38:17,350 Sisi kuwa na kuonekana hivyo kabla, lakini hiyo ni kweli nini anafanya. getchar 886 00:38:17,350 --> 00:38:19,070 inachukua hakuna hoja, anarudi Char. 887 00:38:19,070 --> 00:38:21,340 getdouble inachukua hoja hakuna, anarudi mbili. 888 00:38:21,340 --> 00:38:24,440 getfloat inachukua hakuna hoja anarudi, kuelea, na kadhalika. 889 00:38:24,440 --> 00:38:27,270 GetInt ni katika hapa. getlonglong ni katika hapa. 890 00:38:27,270 --> 00:38:28,820 Na GetString ni katika hapa. 891 00:38:28,820 --> 00:38:29,420 Na hiyo ni yake. 892 00:38:29,420 --> 00:38:33,080 Line hii ya zambarau ni mwingine Preprocessor maelekezo kwa sababu ya 893 00:38:33,080 --> 00:38:35,550 hashtag mwanzoni yake. 894 00:38:35,550 --> 00:38:35,870 >> Wote haki. 895 00:38:35,870 --> 00:38:38,380 Hivyo sasa napenda kwenda katika cs50.c. 896 00:38:38,380 --> 00:38:40,400 Na sisi si kuzungumza kwa muda mrefu sana juu ya hili. 897 00:38:40,400 --> 00:38:43,280 Lakini kukupa mtazamo wa nini kinachoendelea yote hii 898 00:38:43,280 --> 00:38:46,434 muda, niende - 899 00:38:46,434 --> 00:38:48,250 hebu kufanya getchar. 900 00:38:48,250 --> 00:38:51,050 Hivyo getchar ni zaidi ya maoni. 901 00:38:51,050 --> 00:38:52,060 Lakini inaonekana kama hii. 902 00:38:52,060 --> 00:38:54,800 Hivyo hii ni kazi halisi getchar ambazo tumekuwa 903 00:38:54,800 --> 00:38:56,055 kuchukua kwa nafasi ipo. 904 00:38:56,055 --> 00:38:59,370 Na hata kama sisi si kutumia hii moja kwamba mara nyingi, kama milele, ni angalau 905 00:38:59,370 --> 00:39:00,470 rahisi kiasi. 906 00:39:00,470 --> 00:39:02,580 Hivyo ni thamani ya kuchukua haraka kuangalia hapa. 907 00:39:02,580 --> 00:39:06,540 >> Hivyo getchar ina kitanzi usio, makusudi hivyo inaonekana. 908 00:39:06,540 --> 00:39:10,050 Ni kisha wito - na hii ni aina ya nzuri utumiaji wa kanuni ya sisi wenyewe aliandika. 909 00:39:10,050 --> 00:39:11,220 Ni wito GetString. 910 00:39:11,220 --> 00:39:12,460 Kwa sababu ni nini maana ya kupata Char? 911 00:39:12,460 --> 00:39:14,730 Naam, unaweza pia kujaribu kupata nzima mstari wa maandishi kutoka kwa mtumiaji na 912 00:39:14,730 --> 00:39:16,940 basi tu kuangalia moja ya wale wahusika. 913 00:39:16,940 --> 00:39:19,170 Katika mstari wa 60, hapa kidogo kidogo ya hundi sanity. 914 00:39:19,170 --> 00:39:21,610 Kama GetString akarudi null, basi si kuendelea. 915 00:39:21,610 --> 00:39:22,820 Kitu potoka. 916 00:39:22,820 --> 00:39:28,120 >> Sasa hii ni kiasi fulani annoying lakini kawaida katika C. Char max pengine 917 00:39:28,120 --> 00:39:29,960 inawakilisha nini tu msingi juu ya jina lake? 918 00:39:29,960 --> 00:39:31,670 Ni mara kwa mara. 919 00:39:31,670 --> 00:39:36,040 Ni kama thamani numeric ya kubwa Char unaweza kuwakilisha na 920 00:39:36,040 --> 00:39:40,370 bite moja, ambayo pengine ni ya simu 255, ambayo ni idadi kubwa ya wewe 921 00:39:40,370 --> 00:39:42,720 kuwakilisha bits nane, kuanzia sifuri. 922 00:39:42,720 --> 00:39:47,460 Hivyo nimekuwa kutumia hii, katika kazi hii, wakati kuandika kanuni hii, kwa sababu tu 923 00:39:47,460 --> 00:39:51,753 kama kitu fulani kitaenda vibaya katika getchar lakini madhumuni yake katika maisha ni kurudi 924 00:39:51,753 --> 00:39:54,830 Char, unahitaji kwa namna fulani kuwa na uwezo kuashiria kwa mtumiaji huyo 925 00:39:54,830 --> 00:39:55,840 kitu potoka. 926 00:39:55,840 --> 00:39:56,970 Hatuwezi kurudi null. 927 00:39:56,970 --> 00:39:58,480 Ni zinageuka kuwa ni pointer null. 928 00:39:58,480 --> 00:40:01,030 Na tena, getchar ina kurudi Char. 929 00:40:01,030 --> 00:40:04,760 >> Hivyo mkataba, kama kitu fulani kitaenda vibaya, ni wewe, programu, au katika 930 00:40:04,760 --> 00:40:08,160 kesi hiyo, mimi na maktaba, nilikuwa kuamua tu kiholela, kama 931 00:40:08,160 --> 00:40:12,230 kitu fulani kitaenda vibaya, mimi naenda kurudi idadi 255, ambayo ni kweli 932 00:40:12,230 --> 00:40:17,240 ina maana hatuwezi, mtumiaji anaweza si aina tabia ya kuwakilishwa na 933 00:40:17,240 --> 00:40:21,410 simu 255 kwa sababu tulikuwa na kuiba ni kama kinachojulikana sentinel thamani kwa 934 00:40:21,410 --> 00:40:23,410 kuwakilisha tatizo. 935 00:40:23,410 --> 00:40:27,010 Sasa zinageuka kuwa tabia 255 si kitu unaweza aina ya 936 00:40:27,010 --> 00:40:28,380 keyboard yako, hivyo ni hakuna mpango mkubwa. 937 00:40:28,380 --> 00:40:30,910 mtumiaji hana taarifa kwamba Nimekuwa kuibiwa tabia hii. 938 00:40:30,910 --> 00:40:34,620 Lakini kama umewahi kuona katika kurasa mtu juu ya mfumo wa kompyuta baadhi ya kumbukumbu ya 939 00:40:34,620 --> 00:40:38,560 kila kofia kama mara kwa mara hii kwamba anasema, katika kesi ya hitilafu hii nguvu ya mara kwa mara 940 00:40:38,560 --> 00:40:42,720 kurudishwa, hiyo ni baadhi ya binadamu wote walifanya miaka iliyopita ilikuwa kiholela aliamua 941 00:40:42,720 --> 00:40:45,680 kurudi thamani hii maalum na simu yake ya mara kwa mara katika kesi 942 00:40:45,680 --> 00:40:46,840 kitu fulani kitaenda vibaya. 943 00:40:46,840 --> 00:40:48,580 >> Sasa uchawi hutokea chini hapa. 944 00:40:48,580 --> 00:40:52,600 Kwanza, mimi nina kutangaza katika mstari 67 mbili wahusika, C1 na C2. 945 00:40:52,600 --> 00:40:57,080 Na kisha katika mstari 68, kuna kweli mstari wa kanuni kwamba ni kukumbusha ya 946 00:40:57,080 --> 00:41:01,140 rafiki yetu printf, kutokana na kwamba ni gani kuwa asilimia Cs katika quotes. 947 00:41:01,140 --> 00:41:06,490 Lakini taarifa ya nini kinatokea hapa. sscanf maana kamba Scan - 948 00:41:06,490 --> 00:41:11,690 maana Scan mpangilio kamba, ergo sscanf. 949 00:41:11,690 --> 00:41:12,590 Hiyo ina maana gani? 950 00:41:12,590 --> 00:41:16,310 Ina maana wewe kupita kwa sscanf kamba. 951 00:41:16,310 --> 00:41:18,420 Na mstari ni chochote aina user in 952 00:41:18,420 --> 00:41:23,520 Kupita kwa sscanf string format kama hii kwamba anasema scanf ni nini 953 00:41:23,520 --> 00:41:25,870 wewe matumaini ya mtumiaji typed in 954 00:41:25,870 --> 00:41:29,730 Wewe kisha kupita-katika anwani ya mbili chunks ya kumbukumbu, katika kesi hii, 955 00:41:29,730 --> 00:41:31,150 kwa sababu mimi na placeholders mbili. 956 00:41:31,150 --> 00:41:34,610 Hivyo nina kwenda kuwapa anuani ya C1 na anuani ya C2. 957 00:41:34,610 --> 00:41:37,700 >> Na kukumbuka kwamba kutoa kazi anuani ya variable fulani, nini 958 00:41:37,700 --> 00:41:38,950 Kidokezo? 959 00:41:38,950 --> 00:41:41,400 960 00:41:41,400 --> 00:41:45,050 Nini unaweza kufanya kazi kwamba kama matokeo ya kutoa ni anwani ya 961 00:41:45,050 --> 00:41:48,170 kutofautiana, kinyume na kutofautiana yenyewe? 962 00:41:48,170 --> 00:41:49,450 Ni unaweza mabadiliko hayo, haki? 963 00:41:49,450 --> 00:41:53,250 Kama alikuwa mtu ramani ya kimwili anwani, wanaweza kwenda huko na kufanya 964 00:41:53,250 --> 00:41:54,750 wanataka chochote katika anwani hiyo. 965 00:41:54,750 --> 00:41:55,800 Same wazo hapa. 966 00:41:55,800 --> 00:41:59,950 Kama sisi kupita kwa sscanf, anuani ya mbili chunks ya kumbukumbu, hata hayo vidogo 967 00:41:59,950 --> 00:42:03,585 kidogo chunks ya kumbukumbu, C1 na C2, lakini sisi tunasema ni anuani yao, 968 00:42:03,585 --> 00:42:05,170 sscanf unaweza mabadiliko hayo. 969 00:42:05,170 --> 00:42:08,530 >> Hivyo kusudi sscanf katika maisha, kama sisi kusoma ukurasa mtu, ni kusoma kile 970 00:42:08,530 --> 00:42:13,420 mtumiaji typed katika, matumaini kwa mtumiaji kuwa typed katika tabia na labda 971 00:42:13,420 --> 00:42:16,470 mwingine tabia, na chochote mtumiaji typed, tabia ya kwanza inakwenda 972 00:42:16,470 --> 00:42:19,310 hapa, tabia ya pili huenda hapa. 973 00:42:19,310 --> 00:42:22,470 Sasa, kama kando, hii, na wewe ungekuwa tu kujua hii kutoka nyaraka, 974 00:42:22,470 --> 00:42:25,570 ukweli kwamba mimi kuweka nafasi tupu kuna tu ina maana kwamba mimi sijali kama 975 00:42:25,570 --> 00:42:28,440 mtumiaji hits bar nafasi chache mara kabla ya yeye au yeye inachukua 976 00:42:28,440 --> 00:42:30,400 tabia, nina kwenda kwa kupuuza nafasi yoyote nyeupe. 977 00:42:30,400 --> 00:42:32,510 Hivyo kwamba, najua kutoka nyaraka. 978 00:42:32,510 --> 00:42:36,570 >> ukweli kwamba kuna pili% c ikifuatiwa na nafasi nyeupe ni kweli 979 00:42:36,570 --> 00:42:37,410 makusudi. 980 00:42:37,410 --> 00:42:41,190 Nataka kuwa na uwezo wa kuchunguza kama mtumiaji Star up au hakuwa na kushirikiana. 981 00:42:41,190 --> 00:42:45,630 Hivyo nina matumaini kwamba mtumiaji tu typed katika tabia moja, kwa hiyo nina matumaini 982 00:42:45,630 --> 00:42:50,640 kwamba sscanf ni tu kwenda na kurudi thamani 1 sababu, tena, ikiwa mimi kusoma 983 00:42:50,640 --> 00:42:55,400 nyaraka, kusudi sscanf katika maisha ni kurudi kwa idadi ya 984 00:42:55,400 --> 00:42:59,170 vigezo kwamba walikuwa wamejaa na pembejeo mtumiaji. 985 00:42:59,170 --> 00:43:02,270 >> Mimi kupita katika vigezo mbili anwani, C1 na C2. 986 00:43:02,270 --> 00:43:06,420 Nina matumaini, ingawa, kwamba moja tu ya wao anapata kuuawa kwa sababu kama sscanf 987 00:43:06,420 --> 00:43:11,130 anarudi 2, nini labda Kidokezo mantiki? 988 00:43:11,130 --> 00:43:14,600 Kwamba mtumiaji hakuwa tu nipe moja tabia kama mimi aliiambia yake. 989 00:43:14,600 --> 00:43:17,860 Wao pengine typed katika angalau mbili wahusika. 990 00:43:17,860 --> 00:43:22,430 Hivyo kama mimi badala yake hakuwa na pili % C, mimi tu alikuwa moja, ambayo 991 00:43:22,430 --> 00:43:25,370 kusema ukweli itakuwa zaidi angavu mbinu, nadhani mtazamo wa kwanza, 992 00:43:25,370 --> 00:43:30,220 wewe si kwenda kuwa na uwezo wa kuchunguza kama mtumiaji imekuwa kutoa zaidi 993 00:43:30,220 --> 00:43:31,780 pembejeo kuliko wewe kweli alitaka. 994 00:43:31,780 --> 00:43:34,100 Hivyo hii ni fomu thabiti ya kuangalia makosa. 995 00:43:34,100 --> 00:43:35,640 >> Lakini taarifa nini mimi hapa. 996 00:43:35,640 --> 00:43:39,970 Mara baada ya mimi nina uhakika kwamba mtumiaji alinipa moja tabia, mimi huru line, kufanya 997 00:43:39,970 --> 00:43:44,450 kinyume cha GetString, ambayo kwa upande anatumia malloc, na kisha mimi kurudi 998 00:43:44,450 --> 00:43:51,030 C1, tabia ya kuwa mimi matumaini mtumiaji zinazotolewa na tu zinazotolewa. 999 00:43:51,030 --> 00:43:54,680 Hivyo haraka glimpsed tu, lakini maswali yoyote juu ya getchar? 1000 00:43:54,680 --> 00:43:57,450 1001 00:43:57,450 --> 00:43:59,590 Tutaweza kurudi kwa baadhi ya watu wengine. 1002 00:43:59,590 --> 00:44:03,770 >> Naam, napenda kwenda mbele na kufanya hii - tuseme sasa, tu kuwahamasisha yetu 1003 00:44:03,770 --> 00:44:08,910 majadiliano katika wiki ya pamoja muda, hii ni faili inayoitwa structs.h. 1004 00:44:08,910 --> 00:44:11,440 Na tena, hii ni ladha ya kitu ambacho uongo mbele. 1005 00:44:11,440 --> 00:44:13,090 Lakini kumbuka kwamba mengi hii ni ya maoni. 1006 00:44:13,090 --> 00:44:17,440 Hivyo basi mimi kuonyesha tu kuvutia sehemu kwa sasa. 1007 00:44:17,440 --> 00:44:18,020 typedef - 1008 00:44:18,020 --> 00:44:19,700 kuna kuwa Keyword sawa tena. 1009 00:44:19,700 --> 00:44:23,100 typedef sisi kutumia kamba ya kutangaza kama aina maalum data. 1010 00:44:23,100 --> 00:44:27,490 Unaweza kutumia typedef kujenga bidhaa mpya data aina ambayo haikuwepo wakati 1011 00:44:27,490 --> 00:44:28,570 C ilizuliwa. 1012 00:44:28,570 --> 00:44:32,520 Kwa mfano, int kuja na C. Char kuja na C. mara mbili kuja na C. Lakini 1013 00:44:32,520 --> 00:44:34,000 hakuna dhana ya mwanafunzi. 1014 00:44:34,000 --> 00:44:37,230 Na bado itakuwa pretty muhimu kuwa uwezo wa kuandika mpango kwamba maduka 1015 00:44:37,230 --> 00:44:40,440 katika kutofautiana, ID ya mwanafunzi ya simu, jina lao, na nyumba zao. 1016 00:44:40,440 --> 00:44:42,890 Kwa maneno mengine, tatu vipande ya data, kama int na 1017 00:44:42,890 --> 00:44:44,420 kamba na kamba nyingine. 1018 00:44:44,420 --> 00:44:48,220 >> Na typedef, nini pretty nguvu kuhusu hili na sturct Keyword kwa 1019 00:44:48,220 --> 00:44:53,660 muundo, wewe, programu ya mwaka 2013, kweli anaweza kufafanua yako mwenyewe 1020 00:44:53,660 --> 00:44:57,530 data aina ambayo haikuwepo miaka iliyopita lakini kwamba kemikali madhumuni yako. 1021 00:44:57,530 --> 00:45:01,910 Na hivyo hapa, katika mistari 13 kupitia 19, sisi ni kutangaza takwimu mpya aina, kama 1022 00:45:01,910 --> 00:45:04,320 int, lakini wito ni mwanafunzi. 1023 00:45:04,320 --> 00:45:09,310 Na ndani ya kutofautiana hii ni kwenda kuwa na mambo matatu - int, kamba, 1024 00:45:09,310 --> 00:45:09,930 na kamba. 1025 00:45:09,930 --> 00:45:13,040 Hivyo unaweza kufikiria nini kweli kilichotokea hapa, ingawa hii ni 1026 00:45:13,040 --> 00:45:17,160 kidogo ya kurahisisha kwa leo, mwanafunzi kimsingi ni kwenda 1027 00:45:17,160 --> 00:45:19,450 kuangalia kama hii. 1028 00:45:19,450 --> 00:45:22,580 Inaenda kuwa chunk ya kumbukumbu na kitambulisho, jina 1029 00:45:22,580 --> 00:45:25,580 shamba, na shamba nyumba. 1030 00:45:25,580 --> 00:45:30,670 Na tutaweza kuwa na uwezo wa kutumia chunks wale wa kumbukumbu na kupata yao kama ifuatavyo. 1031 00:45:30,670 --> 00:45:38,870 >> Kama mimi kwenda katika struct0.c, hapa ni muda mrefu kiasi, lakini kufuatia 1032 00:45:38,870 --> 00:45:42,630 muundo, ya kificho kwamba anatumia hila hii mpya. 1033 00:45:42,630 --> 00:45:45,790 Hivyo kwanza, basi mimi kuteka mawazo yako na sehemu ya kuvutia juu juu. 1034 00:45:45,790 --> 00:45:49,670 Mkali amefafanua wanafunzi 3, anatangaza mara kwa mara iitwayo wanafunzi na chukueni 1035 00:45:49,670 --> 00:45:53,450 yake kiholela namba 3, tu hivyo nina wanafunzi watatu kwa kutumia 1036 00:45:53,450 --> 00:45:54,830 mpango huu kwa sasa. 1037 00:45:54,830 --> 00:45:55,960 Hiyo inakuja Kuu. 1038 00:45:55,960 --> 00:45:58,860 Na notisi, jinsi gani mimi kutangaza safu ya wanafunzi? 1039 00:45:58,860 --> 00:46:00,480 Naam, mimi tu kutumia syntax sawa. 1040 00:46:00,480 --> 00:46:02,110 mwanafunzi wa neno ni wazi kuwa ni mpya. 1041 00:46:02,110 --> 00:46:04,790 Lakini mwanafunzi, darasa, bracket wanafunzi. 1042 00:46:04,790 --> 00:46:06,720 >> Hivyo kwa bahati mbaya kuna mengi ya utumiaji wa suala hapa. 1043 00:46:06,720 --> 00:46:07,660 Hii ni idadi tu. 1044 00:46:07,660 --> 00:46:09,040 Hivyo hii ni kama kusema tatu. 1045 00:46:09,040 --> 00:46:11,430 Hatari ni yale tu nataka kuwaita kutofautiana. 1046 00:46:11,430 --> 00:46:12,840 Mimi naweza kuiita wanafunzi. 1047 00:46:12,840 --> 00:46:15,880 Lakini darasa, hii si darasa katika kitu oriented Java aina ya njia. 1048 00:46:15,880 --> 00:46:17,220 Ni tu darasa la wanafunzi. 1049 00:46:17,220 --> 00:46:20,590 Na aina ya data ya kipengele kila katika safu kwamba ni mwanafunzi. 1050 00:46:20,590 --> 00:46:23,040 Hivyo hii ni tofauti kidogo na kutoka kwa kusema kitu 1051 00:46:23,040 --> 00:46:25,250 kama hii, ni tu - 1052 00:46:25,250 --> 00:46:29,500 Mimi kusema nipe wanafunzi watatu na kuwaita kwamba darasa safu. 1053 00:46:29,500 --> 00:46:29,800 >> Wote haki. 1054 00:46:29,800 --> 00:46:30,680 Sasa hapa ni kitanzi nne. 1055 00:46:30,680 --> 00:46:33,480 Hii guy ya ukoo - iterate kutoka sifuri hadi kwenye tatu. 1056 00:46:33,480 --> 00:46:35,160 Na hapa ni kipande mpya ya syntax. 1057 00:46:35,160 --> 00:46:37,710 mpango wa kwenda haraka yangu, binadamu, kutoa ni mwanafunzi 1058 00:46:37,710 --> 00:46:39,200 ID, ambayo ni int. 1059 00:46:39,200 --> 00:46:44,650 Na hapa ni syntax na ambayo unaweza kuhifadhi kitu katika uwanja ID katika 1060 00:46:44,650 --> 00:46:48,630 eneo darasani mabano I. Hivyo syntax hii si mpya. 1061 00:46:48,630 --> 00:46:51,450 Hii ina maana tu nipe nane mwanafunzi katika darasa. 1062 00:46:51,450 --> 00:46:52,940 Lakini ishara hii ni mpya. 1063 00:46:52,940 --> 00:46:56,320 Hadi sasa, tumekuwa haiwezi kutumika dot, angalau katika kanuni kama hii. 1064 00:46:56,320 --> 00:47:01,490 Hii ina maana kwenda struct inajulikana kama mwanafunzi na kuweka kitu huko. 1065 00:47:01,490 --> 00:47:05,670 Vile vile, katika mstari huu ujao, 31, kwenda mbele na kuweka chochote mtumiaji aina 1066 00:47:05,670 --> 00:47:10,530 kwa jina hapa na nini kufanya kwa ajili ya nyumba, kitu kimoja, kwenda mbele na 1067 00:47:10,530 --> 00:47:13,230 kuiweka katika. nyumba. 1068 00:47:13,230 --> 00:47:15,955 >> Basi ni nini mpango huu hatimaye kufanya? 1069 00:47:15,955 --> 00:47:17,220 Unaweza kuona teaser kidogo huko. 1070 00:47:17,220 --> 00:47:24,780 Hebu kwenda mbele na kufanya kufanya structs 0 dot kufyeka struct 0, ID ya mwanafunzi 1, 1071 00:47:24,780 --> 00:47:28,250 kusema Daudi Mather, mwanafunzi ID 2. 1072 00:47:28,250 --> 00:47:32,070 Rob Kirkland, mwanafunzi ID 3. 1073 00:47:32,070 --> 00:47:35,010 Lauren Leverit - 1074 00:47:35,010 --> 00:47:38,380 na kitu pekee mpango huu alivyofanya, ambayo ni haki kabisa holela, ni 1075 00:47:38,380 --> 00:47:40,980 Nilitaka kufanya kitu na data hii, sasa kwamba nimepata alitufundisha jinsi ya 1076 00:47:40,980 --> 00:47:43,450 kutumia structs, ni mimi tu alikuwa hii kitanzi ziada hapa. 1077 00:47:43,450 --> 00:47:45,260 Mimi iterate juu ya safu ya wanafunzi. 1078 00:47:45,260 --> 00:47:49,170 Nilikuwa yetu, labda sasa ukoo rafiki, kamba kulinganisha, stircomp kwa 1079 00:47:49,170 --> 00:47:53,780 kuangalia ni nyumba 8 ya mwanafunzi sawa na Mather? 1080 00:47:53,780 --> 00:47:56,760 Na kama hivyo, tu magazeti kitu kiholela kama, ndiyo, ni. 1081 00:47:56,760 --> 00:47:59,430 Lakini tena, tu kunipa fursa kutumia na kutumia tena na 1082 00:47:59,430 --> 00:48:02,270 kutumia tena hii mpya dot nukuu. 1083 00:48:02,270 --> 00:48:03,250 >> Hivyo anayejali, haki? 1084 00:48:03,250 --> 00:48:06,270 Kuja na mpango wa mwanafunzi ni kiasi fulani holela, lakini zinageuka 1085 00:48:06,270 --> 00:48:09,800 kwamba tunaweza kufanya mambo muhimu kwa hii, kwa mfano kama ifuatavyo. 1086 00:48:09,800 --> 00:48:14,600 Hii ni struct ngumu zaidi katika C. Ni got kadhaa au mashamba zaidi, 1087 00:48:14,600 --> 00:48:15,880 kiasi fulani isiyoeleweka kirahisi jina. 1088 00:48:15,880 --> 00:48:20,110 Lakini kama wameweza milele habari wa graphics file format kuitwa bitmap, BMP, ni 1089 00:48:20,110 --> 00:48:22,830 zinageuka kuwa bitmap file format pretty kiasi kwamba inaonekana kama hii. 1090 00:48:22,830 --> 00:48:24,200 Ni kijinga kidogo smiley uso. 1091 00:48:24,200 --> 00:48:27,840 Ni picha ndogo kwamba nimepata zoomed katika juu ya pretty kubwa ili niweze kuona kila 1092 00:48:27,840 --> 00:48:30,410 ya dots mtu binafsi au saizi. 1093 00:48:30,410 --> 00:48:33,800 Sasa, ni zamu nje tunaweza kuwakilisha nyeusi dot na, kusema, idadi 0. 1094 00:48:33,800 --> 00:48:35,520 Na dot nyeupe na namba 1. 1095 00:48:35,520 --> 00:48:39,140 >> Hivyo kwa maneno mengine, kama unataka kuteka Smiley uso na kuokoa kwamba picha katika 1096 00:48:39,140 --> 00:48:42,680 kompyuta, Inatosha kuhifadhi zeros na ndio kwamba kuangalia kama hii, ambapo, 1097 00:48:42,680 --> 00:48:45,250 tena, ndio ni nyeupe na zeros ni nyeusi. 1098 00:48:45,250 --> 00:48:48,290 Na kwa pamoja, ikiwa wewe kwa ufanisi na kujifunga ya ndio na zeros, una 1099 00:48:48,290 --> 00:48:51,030 gridi ya saizi, na kama wewe kuweka yao nje, una cute 1100 00:48:51,030 --> 00:48:52,560 kidogo smiley uso. 1101 00:48:52,560 --> 00:48:58,150 Sasa, bitmap file format, BMP, ni ufanisi kwamba chini ya Hood, 1102 00:48:58,150 --> 00:49:00,970 lakini kwa zaidi piseli sot kwamba wewe kweli anaweza kuwakilisha rangi. 1103 00:49:00,970 --> 00:49:05,170 >> Lakini wakati una kisasa zaidi file format kama BMP na JPEG na GIF 1104 00:49:05,170 --> 00:49:09,360 na ambayo unaweza kuwa na utambuzi, wale mafaili ya rekodi kawaida si tu 1105 00:49:09,360 --> 00:49:13,760 kuwa zeros na ndio kwa saizi, lakini wana baadhi metadata pia - 1106 00:49:13,760 --> 00:49:16,960 meta kwa maana ya kwamba ni kweli data lakini ni muhimu kuwa na. 1107 00:49:16,960 --> 00:49:21,370 Hivyo hawa mashamba hapa ni ikimaanisha, na tutaweza kuona hili kwa undani zaidi katika P-kuweka 1108 00:49:21,370 --> 00:49:25,810 5, kwamba kabla ya zeros na wale ambao kuwakilisha piseli kwa mfano, 1109 00:49:25,810 --> 00:49:29,110 kuna rundo la metadata kama ukubwa wa picha na 1110 00:49:29,110 --> 00:49:30,250 upana wa picha. 1111 00:49:30,250 --> 00:49:32,910 Na taarifa mimi nina kukwanyua mbali baadhi ya holela mambo hapa - 1112 00:49:32,910 --> 00:49:34,260 upana na urefu. 1113 00:49:34,260 --> 00:49:36,160 Kidogo kuhesabu na baadhi ya mambo mengine. 1114 00:49:36,160 --> 00:49:37,840 Hivyo kuna baadhi ya metadata katika faili. 1115 00:49:37,840 --> 00:49:41,470 >> Lakini kwa kuelewa jinsi files wamelazwa nje kwa njia hii, unaweza kweli 1116 00:49:41,470 --> 00:49:45,890 kisha kuendesha picha, kupona picha kutoka disk, resize images. 1117 00:49:45,890 --> 00:49:47,560 Lakini unaweza si lazima kuongeza yao. 1118 00:49:47,560 --> 00:49:48,480 Mimi zinahitajika picha. 1119 00:49:48,480 --> 00:49:52,840 Hivyo mimi akarudi RJ hapa, ambaye wewe aliona juu ya screen kabisa baadhi ya wakati uliopita. 1120 00:49:52,840 --> 00:49:57,160 Na kama mimi kufungua Akitoa hapa, hii ni kile kinachotokea kama wewe kujaribu kuvuta na 1121 00:49:57,160 --> 00:49:59,380 kuimarisha RJ. 1122 00:49:59,380 --> 00:50:01,480 Yeye si kupata yoyote bora kweli. 1123 00:50:01,480 --> 00:50:06,240 Akitoa sasa ni aina ya blurring ni kidogo kidogo, tu Gloss juu 1124 00:50:06,240 --> 00:50:11,040 ukweli kwamba RJ haina kupata hasa kuimarishwa wakati zoom in 1125 00:50:11,040 --> 00:50:13,310 Na kama kufanya hivyo kwa njia hii, kuona viwanja? 1126 00:50:13,310 --> 00:50:15,490 Yeah, unaweza dhahiri kuona mraba projector. 1127 00:50:15,490 --> 00:50:17,690 >> Hiyo ni nini kupata wakati kuongeza. 1128 00:50:17,690 --> 00:50:22,570 Lakini katika kuelewa jinsi RJ yetu au Uso smiley ni kutekelezwa hebu 1129 00:50:22,570 --> 00:50:24,950 kweli kuandika kificho kwamba kuyaharibu mambo hayo. 1130 00:50:24,950 --> 00:50:29,970 Na nilifikiri ningependa kuishia kwenye kumbuka hii, pamoja na 55 sekunde ya kuongeza kwamba, 1131 00:50:29,970 --> 00:50:31,230 Mimi kuthubutu, kusema badala ya kupotosha. 1132 00:50:31,230 --> 00:50:32,990 >> [Video avspelning] 1133 00:50:32,990 --> 00:50:34,790 >> -Yeye uongo. 1134 00:50:34,790 --> 00:50:38,310 Juu ya nini, mimi sijui. 1135 00:50:38,310 --> 00:50:41,200 >> -Basi je, sisi kujua? 1136 00:50:41,200 --> 00:50:45,280 >> -Kwamba saa 9:15 Ray Santoya mara kwa ATM. 1137 00:50:45,280 --> 00:50:47,830 >> -Basi swali ni nini ilikuwa yeye kufanya saa 9:16? 1138 00:50:47,830 --> 00:50:50,750 >> -Risasi millimeter tisa katika kitu. 1139 00:50:50,750 --> 00:50:52,615 Labda aliona sniper. 1140 00:50:52,615 --> 00:50:54,760 >> -Au alikuwa anafanya kazi pamoja naye. 1141 00:50:54,760 --> 00:50:56,120 >> -Subiri. 1142 00:50:56,120 --> 00:50:57,450 Kwenda nyuma moja. 1143 00:50:57,450 --> 00:50:58,700 >> -Unaona nini? 1144 00:50:58,700 --> 00:51:05,530 1145 00:51:05,530 --> 00:51:09,490 >> -Lete uso wake juu, full screen. 1146 00:51:09,490 --> 00:51:09,790 >> -Wake glasi. 1147 00:51:09,790 --> 00:51:11,040 >> -Kuna kutafakari. 1148 00:51:11,040 --> 00:51:21,790 1149 00:51:21,790 --> 00:51:23,520 >> -Hiyo baseball Neuvitas timu. 1150 00:51:23,520 --> 00:51:24,530 Hiyo ni alama zao. 1151 00:51:24,530 --> 00:51:27,040 >> -Na yeye kuzungumza na mtu yeyote ni amevaa kwamba koti. 1152 00:51:27,040 --> 00:51:27,530 >> [MWISHO video avspelning] 1153 00:51:27,530 --> 00:51:29,180 >> DAVID J. Malan: Hii mapenzi kuwa Tatizo Set 5. 1154 00:51:29,180 --> 00:51:30,720 Tutaona wewe wiki ijayo. 1155 00:51:30,720 --> 00:51:32,330 >> MALE SPIKA: Katika CS50 ijayo. 1156 00:51:32,330 --> 00:51:39,240 >> [Crickets chirping] 1157 00:51:39,240 --> 00:51:41,270 >> [Halisi kucheza]