1 00:00:00,000 --> 00:00:10,970 >> [CHWARAE CERDDORIAETH] 2 00:00:10,970 --> 00:00:12,536 >> DAVID J. Malan: Pob hawl. 3 00:00:12,536 --> 00:00:13,392 >> [Chwerthin] 4 00:00:13,392 --> 00:00:14,240 >> Croeso yn ôl. 5 00:00:14,240 --> 00:00:14,990 Mae hyn yn CS50. 6 00:00:14,990 --> 00:00:16,890 Ac mae hyn yn y diwedd yr wythnos bump. 7 00:00:16,890 --> 00:00:20,020 A hyd yn hyn, rydym wedi 'n bert lawer bod yn cymryd yn ganiataol bod 8 00:00:20,020 --> 00:00:23,480 bodoli compiler hwn, clang, eich bod i wedi bod yn galw ar ffurf y 9 00:00:23,480 --> 00:00:27,100 offeryn eraill o'r enw Gwneud hynny rywsut hud a lledrith yn trosi eich cod ffynhonnell 10 00:00:27,100 --> 00:00:31,350 i mewn cod gwrthrych, y zeros a rhai bod eich cyfrifiaduron CPU, canolog 11 00:00:31,350 --> 00:00:33,410 uned brosesu, mewn gwirionedd yn deall. 12 00:00:33,410 --> 00:00:36,770 Ond mae'n troi allan mae nifer sy'n mynd ymlaen o dan y cwfl yn 13 00:00:36,770 --> 00:00:38,690 rhwng mewnbwn ac allbwn. 14 00:00:38,690 --> 00:00:41,800 >> A hoffwn i gynnig ein bod cnawd ar hynny mewn ychydig mwy o fanylder i 15 00:00:41,800 --> 00:00:45,130 y pedwar cam, yn cael rhywbeth o'r enw cyn-prosesu, rhywbeth 16 00:00:45,130 --> 00:00:48,300 enw lunio, yr ydym wedi gweld, rywbeth a elwir yn cydosod, a 17 00:00:48,300 --> 00:00:49,420 rywbeth a elwir cysylltu. 18 00:00:49,420 --> 00:00:53,270 Felly, hyd yn hyn, yn rhai o'n rhaglenni, rydym wedi cael miniog cynnwys. 19 00:00:53,270 --> 00:00:56,650 Yn fwy diweddar, rydym wedi cael rhai miniog diffinio ar gyfer cysonion. 20 00:00:56,650 --> 00:01:00,660 Felly, mae'n troi allan bod y pethau hynny sy'n yn cael eu rhagddodi gyda'r symbol stwnsh neu 21 00:01:00,660 --> 00:01:04,150 y symbol punt yn cyn-brosesydd cyfarwyddebau. 22 00:01:04,150 --> 00:01:07,960 Dyna dim ond ffordd ffansi o ddweud ei fod yn llinell o god sydd mewn gwirionedd 23 00:01:07,960 --> 00:01:12,280 troi'n rhywbeth arall cyn y cyfrifiadur hyd yn oed yn ceisio newid eich 24 00:01:12,280 --> 00:01:13,800 rhaglen i sero a rhai. 25 00:01:13,800 --> 00:01:19,000 >> Er enghraifft, miniog cynnwys safon I / O. H, 'n bert lawer yn unig yn golygu mynd 26 00:01:19,000 --> 00:01:24,010 yn ei flaen, chrafangia 'r cynnwys y ffeiliau stdio.h a gludo yn iawn yno. 27 00:01:24,010 --> 00:01:25,880 Felly dim zeros a rhai ar y pwynt hwnnw eto. 28 00:01:25,880 --> 00:01:27,470 Mae'n wir dim ond amnewid. 29 00:01:27,470 --> 00:01:30,790 Ac mae hynny'n cael ei wneud yn ystod yr hyn a elwir yn cyfnod cyn-brosesu, pan fyddwch yn 30 00:01:30,790 --> 00:01:34,230 mewn gwirionedd yn rhedeg clang neu'n benodol Gwneud yn y rhan fwyaf o achosion. 31 00:01:34,230 --> 00:01:36,950 Felly, mae hyn i gyd wedi bod yn digwydd gyntaf yn awtomatig hyd yn hyn. 32 00:01:36,950 --> 00:01:38,800 >> Yna daw'r cam casglu. 33 00:01:38,800 --> 00:01:40,920 Ond rydym wedi bod yn gorsymleiddio casgliad. 34 00:01:40,920 --> 00:01:45,060 Llunio rhaglen yn ei olygu i gymryd o rhywbeth fel C, y 35 00:01:45,060 --> 00:01:48,430 cod ffynhonnell rydym wedi bod yn ysgrifennu, i lawr i rywbeth o'r enw cynulliad. 36 00:01:48,430 --> 00:01:52,900 Iaith y Cynulliad yn lefel is iaith, diolch byth, ni fyddwn yn 37 00:01:52,900 --> 00:01:55,480 wedi un achlysur llawer i ysgrifennu semester hwn. 38 00:01:55,480 --> 00:01:59,100 Ond ar y lefel isaf yn y ymdeimlad eich bod yn llythrennol dechrau ysgrifennu 39 00:01:59,100 --> 00:02:04,270 adio a thynnu ac yn lluosi a llwytho ar y cof ac yn arbed i gof, y 40 00:02:04,270 --> 00:02:08,259 cyfarwyddiadau sylfaenol iawn y cyfrifiadur, o dan y cwfl, 41 00:02:08,259 --> 00:02:09,639 mewn gwirionedd yn deall. 42 00:02:09,639 --> 00:02:14,930 >> Yn olaf, cydosod yn cymryd yr iaith honno at y zeros a rhai ein bod wedi 43 00:02:14,930 --> 00:02:16,190 disgrifio hyd yn hyn. 44 00:02:16,190 --> 00:02:19,270 Ac yn wir yn olaf, mae hyn a elwir yn cysylltu gam, a gallwn eich 45 00:02:19,270 --> 00:02:22,360 gweld mewn dim ond hyn o bryd, sy'n cyfuno eich sero a rhai sydd â seroau a 46 00:02:22,360 --> 00:02:24,870 rhai pobl eraill cyn yr ydych wedi creu. 47 00:02:24,870 --> 00:02:26,660 >> Felly, yn ystyried y rhaglen syml super. 48 00:02:26,660 --> 00:02:27,560 Yr oedd yn deillio o Wythnos 1. 49 00:02:27,560 --> 00:02:29,610 Mae'n newydd ei ddweud, Helo Byd, ar y sgrin. 50 00:02:29,610 --> 00:02:30,920 Rydym yn rhedeg hyn drwy clang. 51 00:02:30,920 --> 00:02:33,200 Neu yr ydym yn ei rhedeg trwy Gwneud a oedd yn rhedeg clang. 52 00:02:33,200 --> 00:02:36,170 Ac outputted ar y pryd lle rhai seroau a rhai. 53 00:02:36,170 --> 00:02:38,100 Ond mae'n troi allan mae yn gam canolradd. 54 00:02:38,100 --> 00:02:40,460 Os byddaf yn mynd dros yma - wps, nid oedd eisiau ei weld eto. 55 00:02:40,460 --> 00:02:44,800 Os byddaf yn mynd dros yma i fy offer ac yr wyf yn agor hello.c, dyma 56 00:02:44,800 --> 00:02:46,160 yw bod un rhaglen. 57 00:02:46,160 --> 00:02:48,600 A hyn yr wyf i'n mynd i wneud yn fy terfynell ffenestr yma Rydw i'n mynd i 58 00:02:48,600 --> 00:02:51,430 rhedeg clang yn hytrach na gwneud, a awtomeiddio pob un o'r pedwar 59 00:02:51,430 --> 00:02:52,870 camau hynny i ni. 60 00:02:52,870 --> 00:02:58,620 Ac yr wyf i'n mynd i wneud clang-S a Yna hello.c ac yna mynd i mewn. 61 00:02:58,620 --> 00:03:00,590 >> Ac yr wyf yn cael prydlon amrantu unwaith eto, sydd yn dda. 62 00:03:00,590 --> 00:03:05,280 Ac yn awr yn ychydig yn fwy ffenestr, Rydw i'n mynd i agor gedit yma. 63 00:03:05,280 --> 00:03:09,610 Ac yr wyf i'n mynd i agor ffeil hynny, troi allan, gelwir hello.s hwn 64 00:03:09,610 --> 00:03:11,870 yn cynnwys yr iaith cynulliad Cyfeiriais ato yn gynharach. 65 00:03:11,870 --> 00:03:15,060 Ac mae hyn yn yr hyn a elwir cynulliad iaith, lefel gymharol isel 66 00:03:15,060 --> 00:03:18,470 cyfarwyddiadau bod eich CPU Intel neu beth bynnag yw ei bod y tu mewn 67 00:03:18,470 --> 00:03:19,350 yn deall. 68 00:03:19,350 --> 00:03:24,480 Ac mov ar gyfer symud. alwad ar gyfer galw, rhaid i swyddogaeth lefel isel iawn. 69 00:03:24,480 --> 00:03:26,380 is ar gyfer tynnu. 70 00:03:26,380 --> 00:03:30,370 >> Felly, pan fydd gennych CPU penodol y tu mewn ar eich cyfrifiadur, yr hyn yn ei gwneud yn 71 00:03:30,370 --> 00:03:34,300 gwahanol, yn erbyn eraill CPUs ar y farchnad, yn cael ei pa gyfarwyddiadau y mae'n 72 00:03:34,300 --> 00:03:39,460 deall ac yn aml pa mor effeithlon y mae'n yw, pa mor gyflym yw hi yn cyflawni rhai 73 00:03:39,460 --> 00:03:40,380 cyfarwyddiadau hynny. 74 00:03:40,380 --> 00:03:45,150 Yn awr ar gyfer rhagor o wybodaeth am hyn, gallwch gymryd CS61 Fall nesaf yn y coleg. 75 00:03:45,150 --> 00:03:48,170 Ond dyma yr ydym, er enghraifft, mae rhai adnabod a allai edrych yn gyfarwydd. 76 00:03:48,170 --> 00:03:50,150 hello.c yw enw'r rhaglen. 77 00:03:50,150 --> 00:03:51,070 >> . Destun - 78 00:03:51,070 --> 00:03:54,190 Nid oes llawer o ddiddordeb yno yn unig yn awr, dwyn i gof bod y testun 79 00:03:54,190 --> 00:03:59,190 segment, o ddydd Llun, yw lle yn cof eich rhaglen mewn gwirionedd yn dod i ben i fyny. 80 00:03:59,190 --> 00:04:01,330 Felly dyna o leiaf yn fras cyfarwydd yno. 81 00:04:01,330 --> 00:04:03,730 Yma, wrth gwrs, yn sôn o'n prif swyddogaeth. 82 00:04:03,730 --> 00:04:07,220 Sgrolio i lawr, mae'r rhain yn cyfeirio at bethau cofrestrau gelwir, darnau bach iawn o 83 00:04:07,220 --> 00:04:09,190 y tu mewn cof am eich CPU gwirioneddol. 84 00:04:09,190 --> 00:04:12,930 Ac os wyf yn sgroliwch i lawr hyd yn oed yn pellach, yr wyf yn gweld rhyw fath 85 00:04:12,930 --> 00:04:14,240 sôn anuniongyrchol ASCII. 86 00:04:14,240 --> 00:04:17,120 Ac yno, yn wir, yw y llinyn, helo, coma, byd. 87 00:04:17,120 --> 00:04:20,079 >> Felly, stori hir yn fyr, mae hyn wedi bod yn digwydd i chi, yn awtomatig, 88 00:04:20,079 --> 00:04:22,140 o dan y cwfl i gyd o'r amser hwn. 89 00:04:22,140 --> 00:04:26,450 A beth sydd wedi bod yn digwydd mewn gwirionedd unwaith rydych wedi rhedeg clang, neu ar ffurf 90 00:04:26,450 --> 00:04:29,150 Gwnewch, eich bod yn cael yn gyntaf, o'r cod ffynhonnell, y 91 00:04:29,150 --> 00:04:30,700 hyn a elwir yn iaith cynulliad. 92 00:04:30,700 --> 00:04:35,210 Yna clang yn trosi gwasanaeth yma iaith i lawr i sero a rhai. 93 00:04:35,210 --> 00:04:38,340 Ac mae hyn yn y sleid a ddechreuwyd gennym ein trafodaeth yn Wythnos 0 ar - 94 00:04:38,340 --> 00:04:39,840 ac yna Wythnos 1 ar. 95 00:04:39,840 --> 00:04:44,030 Ac yna yn olaf, a'r rhai sero hynny yn cael eu cyfuno â seroau a rhai 96 00:04:44,030 --> 00:04:47,190 o lyfrgelloedd hynny rydym wedi bod yn cymryd yn ganiataol fel Safon I / O neu 97 00:04:47,190 --> 00:04:50,010 Llyfrgell llinyn neu hyd yn oed y llyfrgell CS50. 98 00:04:50,010 --> 00:04:54,200 >> Felly, i baentio darlun hwn yn fwy golwg, rydym wedi hello.c. 99 00:04:54,200 --> 00:04:57,220 Ac, wrth gwrs, yn defnyddio'r printf gweithredu i ddweud, helo byd. 100 00:04:57,220 --> 00:05:01,810 Y cam casglu yn mynd ag ef i lawr i y ffeil yn jyst yn gweld hello.s, hyd yn oed 101 00:05:01,810 --> 00:05:04,290 er sy'n cael ei arfer yn dileu yn awtomatig ar eich cyfer. 102 00:05:04,290 --> 00:05:06,050 Ond dyna y cod cynulliad yn y cam canol. 103 00:05:06,050 --> 00:05:09,750 Ac yna pan fyddwn yn cydosod y cynulliad iaith, fel petai, dyna pan fyddwch yn 104 00:05:09,750 --> 00:05:10,830 cael sero a'r rhai hynny. 105 00:05:10,830 --> 00:05:13,920 Felly, rydym wedi chwyddo i mewn yn effeithiol heddiw ar yr hyn yr ydym wedi bod yn cymryd yn ganiataol, 106 00:05:13,920 --> 00:05:16,430 yn golygu mynd cod ffynhonnell i wrthwynebu cod. 107 00:05:16,430 --> 00:05:18,850 >> Ond yn olaf, yr un darlun yn awr - gadewch i ni gwthio 'i ar at 108 00:05:18,850 --> 00:05:20,020 yr ochr chwith. 109 00:05:20,020 --> 00:05:22,880 Ac yn nodi bod yn y top mae Soniais stdio.h. 110 00:05:22,880 --> 00:05:25,030 Dyna ffeil ein bod wedi cynnwys ym mron pob un o'r 111 00:05:25,030 --> 00:05:26,250 raglenni rydym wedi ysgrifennu. 112 00:05:26,250 --> 00:05:28,830 A dyna y ffeil y mae ei gynnwys cael copi gludo, 113 00:05:28,830 --> 00:05:30,350 effeithiol ar ben eich cod. 114 00:05:30,350 --> 00:05:34,170 Ond mae'n troi allan bod, ar gyfrifiadur system yn rhywle, mae pob tebyg yn 115 00:05:34,170 --> 00:05:39,150 ffeil stdio.c bod rhywun ysgrifennodd mlynedd yn ôl a gweithredu pob un o'r 116 00:05:39,150 --> 00:05:41,870 swyddogaethau a oedd yn datgan yn stdio.h. 117 00:05:41,870 --> 00:05:45,465 >> Nawr, mewn gwirionedd mae'n debyg ddim ar eich Mac neu eich PC neu hyd yn oed yn y 118 00:05:45,465 --> 00:05:47,660 CS50 offer yn god C amrwd. 119 00:05:47,660 --> 00:05:52,710 Rhywun sydd eisoes yn llunio ac yn cynnwys . O ffeil ar gyfer cod gwrthrych neu a. 120 00:05:52,710 --> 00:05:56,020 ffeiliau, sy'n cyfeirio at lyfrgell a rennir sydd wedi cael ei osod ymlaen llaw a 121 00:05:56,020 --> 00:05:57,240 cyn-llunio i chi. 122 00:05:57,240 --> 00:06:01,950 Ond mae'n debyg nad oes yn wir yn bodoli ar ein stdio.c cyfrifiadur ochr yn ochr 123 00:06:01,950 --> 00:06:02,650 gyda clang. 124 00:06:02,650 --> 00:06:04,960 Eich cod sy'n cael ei llunio ac yn ymgynnull. 125 00:06:04,960 --> 00:06:09,200 Cod stdio.c 's yn cael ei lunio a'i ymgynnull, fel bod hyn yn olaf 126 00:06:09,200 --> 00:06:13,730 cam, i lawr yma, mae'n rhaid i ni rywsut cyswllt, fel petai, eich zeros a rhai 127 00:06:13,730 --> 00:06:18,430 gyda'i sero a rhai i mewn i un rhaglen syml yn y pen draw yn 128 00:06:18,430 --> 00:06:20,540 a elwir yn unig Helo. 129 00:06:20,540 --> 00:06:23,340 >> Felly dyna i gyd o'r hud sy'n wedi bod yn digwydd hyd yn hyn. 130 00:06:23,340 --> 00:06:26,430 A bydd yn parhau i gymryd y prosesau ar gyfer ganiataol, ond yn sylweddoli 131 00:06:26,430 --> 00:06:28,750 mae yna lawer o fanylion llawn sudd mynd ymlaen o dan yno. 132 00:06:28,750 --> 00:06:31,920 Ac mae hyn yn beth sy'n gwneud eich cyfrifiadur gyda Intel tu mewn 133 00:06:31,920 --> 00:06:33,940 yn arbennig o amlwg. 134 00:06:33,940 --> 00:06:37,020 >> Felly, ar y nodyn hwnnw, os hoffech chi ymuno â ni am ginio ddydd Gwener, yn mynd 135 00:06:37,020 --> 00:06:41,570 i'r cs50.net/rsvp gweithle arferol, 13:15 ddydd Gwener. 136 00:06:41,570 --> 00:06:43,400 Ac yn awr ychydig o gyhoeddiadau. 137 00:06:43,400 --> 00:06:44,670 Felly mae gennym ychydig o newyddion da. 138 00:06:44,670 --> 00:06:45,970 Ac mae gennym rywfaint o newyddion drwg. 139 00:06:45,970 --> 00:06:47,260 Dechreuwch gyda rhywfaint o newyddion da yma. 140 00:06:47,260 --> 00:06:52,038 141 00:06:52,038 --> 00:06:54,510 >> [Ochneidio] 142 00:06:54,510 --> 00:06:54,710 >> Mae pob hawl. 143 00:06:54,710 --> 00:06:56,670 Wel, mae'n dechnegol gwyliau, felly nid yw'n gymaint rhodd oddi wrthym ni. 144 00:06:56,670 --> 00:06:58,030 Ond yna y newyddion drwg wrth gwrs. 145 00:06:58,030 --> 00:07:00,550 146 00:07:00,550 --> 00:07:01,880 >> [Ochneidio] 147 00:07:01,880 --> 00:07:03,530 >> Yr wyf yn treulio llawer o amser ar animeiddiadau hyn. 148 00:07:03,530 --> 00:07:04,690 >> [Chwerthin] 149 00:07:04,690 --> 00:07:07,000 >> Bydd sesiwn adolygu hyn yn dod dydd Llun. 150 00:07:07,000 --> 00:07:08,340 Mae'n mynd i fod ar 05:30 PM. 151 00:07:08,340 --> 00:07:11,210 Byddwn yn eich atgoffa o'r holl fanylion hyn drwy e-bost ar y cwrs 152 00:07:11,210 --> 00:07:13,470 gwefan mewn dim ond cwpl o diwrnod. 153 00:07:13,470 --> 00:07:16,610 Bydd yn cael ei ffilmio ac ar gael yn fuan wedi hynny. 154 00:07:16,610 --> 00:07:19,200 Felly, os nad ydych yn gallu gwneud y Dydd Llun slot nos, peidiwch â phoeni. 155 00:07:19,200 --> 00:07:22,270 Adrannau Bydd yr wythnos hon yn dod hefyd canolbwyntio ar adolygu ar gyfer y cwis. 156 00:07:22,270 --> 00:07:25,670 Os yw eich adran ar ddydd Llun, sef yn wir prifysgol gwyliau, byddwn yn 157 00:07:25,670 --> 00:07:26,920 dal i gyfarfod yn yr adran. 158 00:07:26,920 --> 00:07:28,890 Os ydych yn syml na all wneud y adran hon oherwydd eich bod yn mynd 159 00:07:28,890 --> 00:07:29,860 i ffwrdd, mae hynny'n iawn. 160 00:07:29,860 --> 00:07:33,710 Mynychu ddydd Sul neu adran dydd Mawrth neu alaw i mewn i adran Jason, sy'n 161 00:07:33,710 --> 00:07:35,110 gael ar-lein. 162 00:07:35,110 --> 00:07:37,490 >> Felly, mwy o newyddion drwg. 163 00:07:37,490 --> 00:07:41,960 Felly, yn ôl y maes llafur, rydym wedi darlith ddydd Gwener nesaf. 164 00:07:41,960 --> 00:07:43,690 Ond y newyddion da - 165 00:07:43,690 --> 00:07:44,860 yn glir, yr wyf yn treulio gormod o amser ar hyn. 166 00:07:44,860 --> 00:07:45,280 >> [Chwerthin] 167 00:07:45,280 --> 00:07:47,140 >> Byddwn yn canslo darlithoedd ddydd Gwener nesaf. 168 00:07:47,140 --> 00:07:50,590 Felly, a fydd yn anrheg i ni, er mwyn i chi Gall mewn gwirionedd yn cael seibiant braf yn 169 00:07:50,590 --> 00:07:52,990 rhwng yr wythnos a phythefnos felly. 170 00:07:52,990 --> 00:07:57,460 Felly nid oes unrhyw ddarlithoedd yr wythnos nesaf, dim ond bach ychydig cwis, er y dylech fod yn 171 00:07:57,460 --> 00:07:59,030 cael gyffrous gynyddol. 172 00:07:59,030 --> 00:08:03,870 >> Felly, gadewch i ni yn awr yn troi ein sylw at rhywbeth sydd yn wir yn fwy gweledol 173 00:08:03,870 --> 00:08:06,990 ac yn fwy cyffrous ac i osod y llwyfan ar gyfer yr hyn sy'n mynd i fod ar y gorwel 174 00:08:06,990 --> 00:08:08,420 mewn dim ond cwpl o wythnosau amser. 175 00:08:08,420 --> 00:08:12,160 Ar ôl y cwis cyntaf, byddwn yn troi'r canolbwyntio ar ein setiau problem i un arall 176 00:08:12,160 --> 00:08:16,710 problem benodol parth, sef fforensig neu ddiogelwch yn fwy cyffredinol. 177 00:08:16,710 --> 00:08:19,550 >> Yn wir, y traddodiad â'r broblem hon set i mi un o'r 178 00:08:19,550 --> 00:08:24,850 cymrawd neu CAs addysgu i gerdded ar draws campws cymryd rhai lluniau o 179 00:08:24,850 --> 00:08:29,450 pobl amlwg adnabyddadwy ond non, lleoedd neu bethau, yna bob blwyddyn byddaf yn 180 00:08:29,450 --> 00:08:34,520 rhywsut yn llwyddo i ddileu ddamweiniol neu llygredig y cerdyn cyfryngau digidol 181 00:08:34,520 --> 00:08:35,720 dyna tu mewn ein camera. 182 00:08:35,720 --> 00:08:36,860 Ond nid oes llawer mawr. 183 00:08:36,860 --> 00:08:39,200 Gallaf fynd yn ei flaen ac yn plwg hynny yn fy chyfrifiadur. 184 00:08:39,200 --> 00:08:43,010 Gallaf wneud delwedd fforensig ohono, felly i siarad, drwy gopïo y zeros a 185 00:08:43,010 --> 00:08:46,830 rhai oddi ar y cerdyn cof, boed ei cerdyn SD neu gerdyn fflach compact neu 186 00:08:46,830 --> 00:08:48,100 beth bynnag yr ydych yn gyfarwydd ag ef. 187 00:08:48,100 --> 00:08:49,300 Ac yna gallwn roi hynny. 188 00:08:49,300 --> 00:08:53,190 >> Ac felly yr her sydd o'n blaenau, ymhlith eraill pethau i chi, bydd yn ysgrifennu 189 00:08:53,190 --> 00:08:58,630 Cod C sy'n adennill criw cyfan o Bydd JPEG i mi a dangos fod 190 00:08:58,630 --> 00:09:00,190 bobl hynny, lleoedd neu bethau. 191 00:09:00,190 --> 00:09:03,340 A byddwn hefyd yn siarad, yn y broblem gosod ac yn y dyddiau i ddod, am 192 00:09:03,340 --> 00:09:04,440 graffeg yn fwy cyffredinol. 193 00:09:04,440 --> 00:09:06,140 Rydym wedi defnyddio nhw, cwrs, am dorri allan. 194 00:09:06,140 --> 00:09:09,080 Ond eich bod wedi fath o gymryd yn ganiataol mae hyn yn bodoli syniadau lefel uchel 195 00:09:09,080 --> 00:09:10,680 petryalau a siapiau hirgrwn. 196 00:09:10,680 --> 00:09:12,450 Ond o dan y cwfl mae yna picsel. 197 00:09:12,450 --> 00:09:14,370 A bu'n rhaid i chi ddechrau meddwl am hynny. 198 00:09:14,370 --> 00:09:18,800 Neu a fydd ar gyfer p-set 4 yn rhaid i chi feddwl am y bwlch rhwng eich brics, sut 199 00:09:18,800 --> 00:09:21,990 gyflym rydych yn bêl yn cael ei symud ar draws y sgrîn ar gyfer torri allan. 200 00:09:21,990 --> 00:09:24,830 Felly mae syniad hwn o'r dotiau ar eich sgrîn sy'n 201 00:09:24,830 --> 00:09:26,290 yn dod i rym yn barod. 202 00:09:26,290 --> 00:09:29,430 >> Nawr yr hyn yr ydych yn gweld, fodd bynnag, yw beth eich bod yn cael ar sgrin cyfrifiadur. 203 00:09:29,430 --> 00:09:33,680 Os ydych chi erioed wedi gwylio rhai da neu teledu ddrwg, groes yn eu 'n bert lawer 204 00:09:33,680 --> 00:09:36,280 trin y gynulleidfa debyg technophobes nad ydynt mewn gwirionedd 205 00:09:36,280 --> 00:09:37,630 gwybod llawer am cyfrifiadurol. 206 00:09:37,630 --> 00:09:40,840 Ac felly mae'n hawdd iawn ar gyfer yr heddlu ditectif i'w ddweud, gallwch 207 00:09:40,840 --> 00:09:41,710 glanhau hynny i mi? 208 00:09:41,710 --> 00:09:42,710 Neu wella, dde? 209 00:09:42,710 --> 00:09:45,550 Gwella yn debyg i'r gair gwefr yn unrhyw sioe ymwneud â throseddau fwyaf. 210 00:09:45,550 --> 00:09:49,240 A'r realiti yw os byddwch yn cymryd iawn darlun aneglur o dan amheuaeth yn ei wneud 211 00:09:49,240 --> 00:09:51,620 rhywbeth drwg, ni allwch yn unig wella. 212 00:09:51,620 --> 00:09:53,080 Ni allwch chwyddo i mewn anfeidrol. 213 00:09:53,080 --> 00:09:56,350 Ni allwch weld yn y glint o rhywun llygaid a gyflawnodd y 214 00:09:56,350 --> 00:09:59,860 trosedd penodol, er gwaethaf y nifer yr achosion o hyn ar y teledu. 215 00:09:59,860 --> 00:10:04,110 >> Felly, gyda hynny gadewch i ni cymell y problem sydd ar y gweill gosod gyda cipolwg ar 216 00:10:04,110 --> 00:10:05,765 rhai sioeau yr ydych gallai fod yn gyfarwydd. 217 00:10:05,765 --> 00:10:06,500 >> [VIDEO Playback] 218 00:10:06,500 --> 00:10:07,835 >> -OK. 219 00:10:07,835 --> 00:10:09,956 Yn awr, gadewch i ni gael edrych yn dda ar chi. 220 00:10:09,956 --> 00:10:17,060 221 00:10:17,060 --> 00:10:17,766 >> -Cynnal ei. 222 00:10:17,766 --> 00:10:18,658 Rhedeg y cefn. 223 00:10:18,658 --> 00:10:19,550 >> -Arhoswch funud. 224 00:10:19,550 --> 00:10:21,580 Mynd yn iawn. 225 00:10:21,580 --> 00:10:21,800 >> -Mae. 226 00:10:21,800 --> 00:10:22,690 Rhewi hynny. 227 00:10:22,690 --> 00:10:23,692 >> Sgrîn-lawn. 228 00:10:23,692 --> 00:10:23,846 >> -OK. 229 00:10:23,846 --> 00:10:24,154 Rhewi hynny. 230 00:10:24,154 --> 00:10:25,140 >> -Tynhau i fyny ar hynny, bydd ya? 231 00:10:25,140 --> 00:10:27,090 >> -Fector i mewn ar y boi gan yr olwyn gefn. 232 00:10:27,090 --> 00:10:29,730 >> -Zoom i mewn i'r dde yma ar y fan a'r lle hwn. 233 00:10:29,730 --> 00:10:33,700 >> -Gyda'r offer cywir, y ddelwedd y gellir ei ehangu a'i hogi. 234 00:10:33,700 --> 00:10:34,490 >> -Beth sy'n bod? 235 00:10:34,490 --> 00:10:35,870 >> -Mae'n rhaglen wella. 236 00:10:35,870 --> 00:10:36,793 >> -A allwch egluro hynny o gwbl? 237 00:10:36,793 --> 00:10:38,560 >> -I ddim yn gwybod. 238 00:10:38,560 --> 00:10:39,090 Gadewch i wella. 239 00:10:39,090 --> 00:10:41,690 >> -Gwella adran A-6. 240 00:10:41,690 --> 00:10:43,510 >> -I wella y manylion a - 241 00:10:43,510 --> 00:10:44,456 >> -Rwy'n credu bod yna ddigon i wella. 242 00:10:44,456 --> 00:10:45,402 Rhyddhau i fy sgrin. 243 00:10:45,402 --> 00:10:47,300 >> -Gwella myfyrio yn ei llygad. 244 00:10:47,300 --> 00:10:49,330 >> -Gadewch i ni redeg hyn drwy gwella fideo. 245 00:10:49,330 --> 00:10:50,340 >> -Edgar, gallwch gwella hyn? 246 00:10:50,340 --> 00:10:52,320 >> -Arhoswch. 247 00:10:52,320 --> 00:10:54,290 >> -I've bod yn gweithio ar fyfyrio hwn. 248 00:10:54,290 --> 00:10:55,560 >> -Rhywun myfyrio ar. 249 00:10:55,560 --> 00:10:56,440 >> -Myfyrio. 250 00:10:56,440 --> 00:10:57,940 >> -Mae adlewyrchiad wyneb y dyn. 251 00:10:57,940 --> 00:10:58,860 >> -The myfyrio. 252 00:10:58,860 --> 00:10:59,710 >> -Mae adlewyrchiad. 253 00:10:59,710 --> 00:11:00,900 >> -Zoom i mewn ar y drych. 254 00:11:00,900 --> 00:11:03,500 >> -Gallwch weld adlewyrchiad. 255 00:11:03,500 --> 00:11:04,700 >> -Allwch chi wella delwedd o fan hyn? 256 00:11:04,700 --> 00:11:05,700 >> -Allwch chi wella ef yma? 257 00:11:05,700 --> 00:11:06,500 >> -Allwch chi ei wella? 258 00:11:06,500 --> 00:11:07,380 >> -Allwch chi ei wella? 259 00:11:07,380 --> 00:11:08,190 >> -A allwn ni wella hyn? 260 00:11:08,190 --> 00:11:08,940 >> -Allwch chi ei wella? 261 00:11:08,940 --> 00:11:10,280 >> -Cynnal ar ail, byddaf yn gwella. 262 00:11:10,280 --> 00:11:11,570 >> -Zoom i mewn ar y drws. 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 >> [Chwerthin] 266 00:11:13,197 --> 00:11:14,360 >> -Symud i mewn 267 00:11:14,360 --> 00:11:15,100 >> -Aros, stopio. 268 00:11:15,100 --> 00:11:15,740 >> -Stop. 269 00:11:15,740 --> 00:11:16,290 >> -Saib hynny. 270 00:11:16,290 --> 00:11:19,390 >> -Cylchdroi 75 gradd o amgylch fertigol os gwelwch yn dda. 271 00:11:19,390 --> 00:11:19,886 >> [Chwerthin] 272 00:11:19,886 --> 00:11:24,350 >> -Aros, ac yn ôl i'r rhan am y drws eto. 273 00:11:24,350 --> 00:11:26,330 >> -Oes gennych enhancer image y gall didfap? 274 00:11:26,330 --> 00:11:28,990 >> -Efallai y gallwn ddefnyddio'r Pradeep Sen ddull i weld i mewn i'r ffenestri. 275 00:11:28,990 --> 00:11:30,680 >> -Mae'r meddalwedd yn gyflwr y celf. 276 00:11:30,680 --> 00:11:31,676 >> -Mae gwerth icon i ffwrdd. 277 00:11:31,676 --> 00:11:34,166 >> -Gyda'r cyfuniad cywir o algorithmau. 278 00:11:34,166 --> 00:11:38,399 >> -Mae'n cymryd algorithmau goleuo i gall y lefel nesaf ac yr wyf yn eu defnyddio i 279 00:11:38,399 --> 00:11:38,648 gwella y llun. 280 00:11:38,648 --> 00:11:42,050 >> -Lock ymlaen ac ehangu'r z-echel. 281 00:11:42,050 --> 00:11:42,760 >> -Gwella. 282 00:11:42,760 --> 00:11:43,060 >> -Gwella. 283 00:11:43,060 --> 00:11:43,760 >> -Gwella. 284 00:11:43,760 --> 00:11:45,010 >> -Rhewi a gwella. 285 00:11:45,010 --> 00:11:47,470 286 00:11:47,470 --> 00:11:47,910 >> [VIDEO END Playback] 287 00:11:47,910 --> 00:11:51,470 >> DAVID J. Malan: Set Problem Felly 5 yw'r hyn sydd i ddod yno. 288 00:11:51,470 --> 00:11:55,260 Felly, byddwn yn fuan yn cael gwell dealltwriaeth o pryd a pham y gallwch 289 00:11:55,260 --> 00:11:57,300 ac ni all ein wella yn y ffordd honno. 290 00:11:57,300 --> 00:12:00,090 Ond yn gyntaf, gadewch i ni ddychwelyd i'n sylw i rai o'r blociau adeiladu gallwn eich 291 00:12:00,090 --> 00:12:02,250 angen i ni allu dweud y stori honno. 292 00:12:02,250 --> 00:12:05,580 >> Felly cofio i ni dynnu llun hwn ar Llun a ychydig bach yr wythnos diwethaf. 293 00:12:05,580 --> 00:12:09,970 Ac mae hyn yn disgrifio cynllun o bethau er cof am eich cyfrifiadur pan 294 00:12:09,970 --> 00:12:11,000 rhedeg rhai rhaglen. 295 00:12:11,000 --> 00:12:14,310 Mae'r segment dechnoleg i fyny top, galw i gof, yn cyfeirio at y zeros a rhai gwirioneddol 296 00:12:14,310 --> 00:12:16,000 sy'n cyfansoddi eich rhaglen. 297 00:12:16,000 --> 00:12:19,340 Mae, is na hynny, mae rhai ymgychwyn neu data uninitialized, sydd fel arfer yn 298 00:12:19,340 --> 00:12:22,910 yn cyfeirio at bethau fel cysonion neu llinynnau neu newidynnau byd-eang sy'n cael 299 00:12:22,910 --> 00:12:24,200 ei ddatgan o flaen llaw. 300 00:12:24,200 --> 00:12:26,500 Mae y domen, ond byddwn yn dod yn ôl at hynny mewn ychydig. 301 00:12:26,500 --> 00:12:27,410 >> Ac yna mae y pentwr. 302 00:12:27,410 --> 00:12:30,660 Mae llawer yn hoffi pentwr o hambyrddau yn y caffeteria, dyma lle cof yn cael 303 00:12:30,660 --> 00:12:33,610 haenau a haenau pryd bynnag y i wneud yr hyn mewn rhaglen? 304 00:12:33,610 --> 00:12:36,380 305 00:12:36,380 --> 00:12:37,730 Beth yw'r defnydd pentwr amdano? 306 00:12:37,730 --> 00:12:39,320 >> Yeah? 307 00:12:39,320 --> 00:12:40,000 >> Ffoniwch swyddogaeth. 308 00:12:40,000 --> 00:12:42,890 Unrhyw tro y byddwch yn galw swyddogaeth, mae'n a roddir i sliver o gof ar gyfer ei 309 00:12:42,890 --> 00:12:45,020 newidynnau lleol neu ei baramedrau. 310 00:12:45,020 --> 00:12:48,810 Ac yn ddarluniadol, gwelwn fod gyda phob swyddogaeth olynol alw, pan A 311 00:12:48,810 --> 00:12:52,520 galwadau B galwadau C galwadau D, maent yn cael haenau ar y pentwr. 312 00:12:52,520 --> 00:12:55,630 Ac o fewn pob un o'r dafell hynny o cof yn ei hanfod gwmpas unigryw 313 00:12:55,630 --> 00:12:58,590 ar gyfer y swyddogaeth honno, sydd, wrth gwrs, yn broblem os ydych am i law 314 00:12:58,590 --> 00:13:01,850 o un swyddogaeth i'r llall Darn o ddata yr ydych ei eisiau 315 00:13:01,850 --> 00:13:03,500 i droi neu newid. 316 00:13:03,500 --> 00:13:08,060 >> Felly, beth oedd ein ateb i alluogi Mae swyddogaeth a gynrychiolir gan un pentwr 317 00:13:08,060 --> 00:13:11,390 fframio i newid y cof y tu mewn o ffrâm pentwr arall? 318 00:13:11,390 --> 00:13:14,590 Sut y ddau siarad i un arall? 319 00:13:14,590 --> 00:13:18,510 Felly, trwy gyfrwng arwyddion neu gyfeiriadau, sydd, unwaith eto, dim ond disgrifio ble yn 320 00:13:18,510 --> 00:13:22,280 cof, ar ffurf benodol Rhif brathu, y penodol 321 00:13:22,280 --> 00:13:23,830 Gellir werth i'w gweld. 322 00:13:23,830 --> 00:13:26,860 Felly, yn dwyn i gof y tro diwethaf hefyd rydym wedi parhau y stori ac edrych ar 323 00:13:26,860 --> 00:13:28,280 rhaglen bygi yn deg. 324 00:13:28,280 --> 00:13:32,900 Ac mae hyn yn rhaglen yn buggy am ychydig resymau, ond yr un mwyaf worrisome yn 325 00:13:32,900 --> 00:13:34,620 oherwydd ei fod yn methu i wirio beth? 326 00:13:34,620 --> 00:13:39,111 327 00:13:39,111 --> 00:13:40,450 >> Yeah, nid yw'n edrych ar y mewnbwn. 328 00:13:40,450 --> 00:13:41,870 Mae'n ddrwg gennym? 329 00:13:41,870 --> 00:13:43,880 >> Os yw'n fwy na 12 nod. 330 00:13:43,880 --> 00:13:47,260 Felly drwsiadus iawn, pan fyddwch yn ffonio memcopy, sydd, fel yr awgryma'r enw, dim ond 331 00:13:47,260 --> 00:13:50,630 copïau cof o'i ail ddadl yn ei ddadl gyntaf. 332 00:13:50,630 --> 00:13:54,730 Mae'r drydedd ddadl, drwsiadus iawn, yn gwirio i wneud yn siŵr nad ydych yn 333 00:13:54,730 --> 00:13:59,400 copïo yn fwy na, yn yr achos hwn, hyd o bar, nifer o gymeriadau, 334 00:13:59,400 --> 00:14:03,810 i mewn i'r gyrchfan, sydd yn hyn amrywiaeth C. Ond y broblem yw bod yr hyn 335 00:14:03,810 --> 00:14:07,230 os nad yw C ei hun yn ddigon mawr i ymdrin â hynny? 336 00:14:07,230 --> 00:14:09,900 Rydych yn mynd i gopïo nifer y bytes eich bod wedi ei roi. 337 00:14:09,900 --> 00:14:13,040 Ond beth ydych chi'n mewn gwirionedd yn cael mwy bytes nag sydd gennych le i? 338 00:14:13,040 --> 00:14:16,770 >> Wel, mae hyn yn rhaglen hynod ffôl yn unig blindly mynd yn ei flaen i gymryd beth bynnag y mae'n 339 00:14:16,770 --> 00:14:20,650 roddir, helo slaes 0 yn gwych os llinyn yn brin 340 00:14:20,650 --> 00:14:22,040 ddigon, fel pum chars. 341 00:14:22,040 --> 00:14:26,470 Ond os yw'n mewn gwirionedd yn 12 nod neu 1,200 o gymeriadau, gwelsom y tro diwethaf 342 00:14:26,470 --> 00:14:29,380 eich bod yn jyst yn mynd i yn gyfan gwbl trosysgrifo cof sy'n 343 00:14:29,380 --> 00:14:30,470 nad yw'n perthyn i chi. 344 00:14:30,470 --> 00:14:34,390 Ac achos gwaethaf, os ydych yn trosysgrifo bod cyfran coch yno y byddem ni'n ei alw y 345 00:14:34,390 --> 00:14:35,380 dychwelyd cyfeiriad - 346 00:14:35,380 --> 00:14:38,370 mae hyn yn unig lle mae'r cyfrifiadur yn awtomatig, i chi, y tu ôl i'r 347 00:14:38,370 --> 00:14:43,130 golygfeydd, tucks i ffwrdd gwerth 32-bit sy'n atgoffa i ba gyfeiriad y dylai 348 00:14:43,130 --> 00:14:47,080 dychwelyd pan foo, mae hyn yn swyddogaeth arall, yn cael ei wneud cyflawni. 349 00:14:47,080 --> 00:14:49,320 Mae'n bara a briwsion o ryw fath y mae'n dychwelyd. 350 00:14:49,320 --> 00:14:52,490 Os ydych yn ysgrifennu dros hynny, o bosibl, os ydych yn y dyn drwg, gall y gallai 351 00:14:52,490 --> 00:14:54,750 o bosibl yn cymryd drosodd cyfrifiadur rhywun. 352 00:14:54,750 --> 00:14:58,020 A byddwch yn sicr damwain yn y rhan fwyaf o achosion. 353 00:14:58,020 --> 00:15:01,690 >> Nawr y broblem hon yn unig yn gwaethygu wrth i ni ddechrau siarad am cof 354 00:15:01,690 --> 00:15:03,010 rheoli mwy cyffredinol. 355 00:15:03,010 --> 00:15:07,150 Ac malloc, ar gyfer dyrannu cof, yn swyddogaeth y gallwn ei defnyddio i ddyrannu 356 00:15:07,150 --> 00:15:11,260 cof pan nad ydym yn gwybod o flaen llaw y gallai fod angen rhai ni. 357 00:15:11,260 --> 00:15:13,960 Felly, er enghraifft, os byddaf yn mynd yn ôl at y peiriant yma. 358 00:15:13,960 --> 00:15:21,010 Ac yr wyf yn agor i fyny o hello2.c tro diwethaf, dwyn i gof y rhaglen yma, a oedd yn edrych 359 00:15:21,010 --> 00:15:23,500 rhywbeth bach fel hyn, dim ond tair llinell - 360 00:15:23,500 --> 00:15:27,940 nodi eich enw, yna enw llinyn, ar y chwith, yn hafal i getstring. 361 00:15:27,940 --> 00:15:29,690 Ac yna rydym yn ei hargraffu, enw'r defnyddiwr. 362 00:15:29,690 --> 00:15:31,170 >> Felly roedd hwn yn rhaglen syml super. 363 00:15:31,170 --> 00:15:34,870 I fod yn glir, gadewch i mi fynd yn ei flaen ac yn gwneud helo-2. 364 00:15:34,870 --> 00:15:36,680 Rydw i'n mynd i wneud dot slaes helo-2. 365 00:15:36,680 --> 00:15:37,750 Nodwch eich enw chi - 366 00:15:37,750 --> 00:15:38,140 Dafydd. 367 00:15:38,140 --> 00:15:38,840 Enter. 368 00:15:38,840 --> 00:15:39,540 Helo David. 369 00:15:39,540 --> 00:15:41,060 Mae'n ymddangos i weithio'n iawn. 370 00:15:41,060 --> 00:15:43,140 Ond beth sy'n digwydd mewn gwirionedd dan cwfl yma? 371 00:15:43,140 --> 00:15:44,670 Yn gyntaf gadewch i croen yn ôl rhai haenau. 372 00:15:44,670 --> 00:15:48,380 Llinyn yn unig yw gyfystyr rydym wedi gwireddu ar gyfer yr hyn? 373 00:15:48,380 --> 00:15:49,110 Seren torgoch. 374 00:15:49,110 --> 00:15:52,740 Felly, gadewch i ni ei wneud yn ychydig yn fwy dirgel ond yn fwy cywir yn dechnegol bod hyn yn 375 00:15:52,740 --> 00:15:55,570 yn seren golosg, sy'n golygu bod enw, ie, yn newidyn. 376 00:15:55,570 --> 00:15:59,920 Ond beth siopau enw yw cyfeiriad y golosg, sy'n teimlo ychydig yn rhyfedd 377 00:15:59,920 --> 00:16:01,050 gan fy mod yn cael llinyn ôl. 378 00:16:01,050 --> 00:16:03,580 Im 'yn cael yn ôl lluosog chars nid torgoch. 379 00:16:03,580 --> 00:16:07,400 >> Ond wrth gwrs, dim ond angen y cyntaf gyfeiriad torgoch i gofio lle mae'r 380 00:16:07,400 --> 00:16:08,870 llinyn cyfan oherwydd pham? 381 00:16:08,870 --> 00:16:12,700 Sut yr ydych yn chyfrif i maes ble y diwedd y llinyn yw gwybod y dechrau? 382 00:16:12,700 --> 00:16:13,630 Y sero slaes. 383 00:16:13,630 --> 00:16:17,260 Felly, gyda y ddau cliwiau i chi chyfrif i maes cyn dechrau a diwedd 384 00:16:17,260 --> 00:16:20,280 unrhyw llinyn yw, ar yr amod eu bod yn ffurfio'n gywir â'r null 385 00:16:20,280 --> 00:16:22,110 terminator, y sero slaes. 386 00:16:22,110 --> 00:16:24,520 >> Ond mae hyn yn galw getstring. 387 00:16:24,520 --> 00:16:28,020 Ac mae'n ymddangos bod getstring yr holl amser hwn wedi bod yn fath o 388 00:16:28,020 --> 00:16:28,820 twyllo i ni. 389 00:16:28,820 --> 00:16:32,460 Mae wedi bod yn gwneud llafur hwn, i fod yn sicr, cael llinyn gan y defnyddiwr. 390 00:16:32,460 --> 00:16:34,580 Ond ble bod y cof bod yn dod o? 391 00:16:34,580 --> 00:16:38,440 Os ydym yn mynd yn ôl at y darlun yma ac cymhwyso'r diffiniad o ddim ond 392 00:16:38,440 --> 00:16:42,610 funud yn ôl, bod y pentwr yw lle cof yn mynd pan fydd swyddogaethau yn cael eu galw, 393 00:16:42,610 --> 00:16:45,370 gan y rhesymeg, pan fyddwch yn ffonio getstring, ac yna mi deipio i mewn 394 00:16:45,370 --> 00:16:50,900 D-A-V-I-D Nodwch, lle mae D-A-V-I-D slaes sero storio, yn seiliedig ar y 395 00:16:50,900 --> 00:16:53,480 stori rydym wedi dweud wrthym yn hyn? 396 00:16:53,480 --> 00:16:55,190 >> Mae'n ymddangos i fod mewn y simnai, dde? 397 00:16:55,190 --> 00:16:58,120 Pan fyddwch yn ffonio cael llinyn byddwch yn cael ychydig tafell o gof ar y pentwr. 398 00:16:58,120 --> 00:17:01,630 Felly, mae'n sefyll i resymu bod D-A-V-I-D slaes sero yn cael ei storio 399 00:17:01,630 --> 00:17:02,770 yno yn y pentwr. 400 00:17:02,770 --> 00:17:07,680 Ond arhoswch funud, getstring ffurflenni y llinyn, fel petai, sy'n golygu 401 00:17:07,680 --> 00:17:11,700 mae'n hambwrdd o'r caffeteria yn cael ei dynnu oddi ar y pentwr. 402 00:17:11,700 --> 00:17:14,560 Ac rydym yn dweud dro ar ôl diwethaf y cyn gynted ag y ffurflenni swyddogaeth, a ydych yn cymryd y 403 00:17:14,560 --> 00:17:20,109 hambwrdd, fel petai, oddi ar y simnai, pa gallwch gymryd yn ganiataol am weddillion 404 00:17:20,109 --> 00:17:21,819 bod y cof? 405 00:17:21,819 --> 00:17:25,160 Wyf yn fath ohonynt redrew fel marciau cwestiwn oherwydd eu bod yn dod yn effeithiol 406 00:17:25,160 --> 00:17:26,250 gwerthoedd anhysbys. 407 00:17:26,250 --> 00:17:29,500 Gellir eu hailddefnyddio pan fydd rhai Gelwir swyddogaeth nesaf. 408 00:17:29,500 --> 00:17:31,870 >> Mewn geiriau eraill, os ydym yn digwydd cael ei storio - 409 00:17:31,870 --> 00:17:34,350 'N annhymerus' dynnu llun cyflym yma y pentwr. 410 00:17:34,350 --> 00:17:38,690 Os digwydd bod yn tynnu gwaelod o fy segment cof, a byddwn yn dweud 411 00:17:38,690 --> 00:17:42,230 bod hyn yn y lle y cof meddiannu gan brif ac efallai ARG c a 412 00:17:42,230 --> 00:17:46,790 ARG v ac unrhyw beth arall yn y rhaglen, pan getstring ei alw, 413 00:17:46,790 --> 00:17:51,120 yn ôl pob tebyg yn cael getstring darn o gof yma. 414 00:17:51,120 --> 00:17:53,940 Ac yna D-A-V-I-D rywsut yn dod i ben i fyny yn y swyddogaeth hon. 415 00:17:53,940 --> 00:17:55,320 Ac yr wyf i'n mynd i gorsymleiddio'r. 416 00:17:55,320 --> 00:18:00,050 Ond gadewch i ni dybio bod ei D-A-V-I-D slaes sero. 417 00:18:00,050 --> 00:18:03,500 Felly mae hyn yn llawer o bytes cael eu defnyddio yn y ffrâm am getstring. 418 00:18:03,500 --> 00:18:08,270 >> Ond cyn gynted ag ffurflenni getstring, rydym yn dywedais y tro diwethaf fod y cof dros 419 00:18:08,270 --> 00:18:11,340 yma i gyd yn dod - Woops! - 420 00:18:11,340 --> 00:18:14,270 i gyd yn dod yn dileu yn effeithiol. 421 00:18:14,270 --> 00:18:17,220 A gallwn feddwl am hyn nawr fel cwestiwn marciau oherwydd pwy a ŵyr 422 00:18:17,220 --> 00:18:18,720 beth sy'n mynd i ddod yn y cof. 423 00:18:18,720 --> 00:18:22,130 Yn wir, yr wyf yn aml iawn yn galw swyddogaethau heblaw getstring. 424 00:18:22,130 --> 00:18:24,750 A chyn gynted ag yr wyf yn galw rhai eraill swyddogaeth na getstring, efallai nad ydynt mewn 425 00:18:24,750 --> 00:18:28,860 y rhaglen benodol hon rydym yn unig yn edrych mewn ond mae rhai eraill, yn sicr mae rhai eraill 426 00:18:28,860 --> 00:18:34,180 Gallai swyddogaeth y pen draw yn cael ei roi y fan a'r lle nesaf yn y pentwr. 427 00:18:34,180 --> 00:18:39,410 >> Felly, ni all fod yn y siopau getstring D-A-V-I-D ar y pentwr oherwydd fy mod y byddai 428 00:18:39,410 --> 00:18:41,040 yn syth yn colli mynediad iddo. 429 00:18:41,040 --> 00:18:43,720 Ond rydym yn gwybod eu bod yn getstring dim ond dychwelyd beth? 430 00:18:43,720 --> 00:18:47,220 Dyw hi ddim yn dychwelyd i mi chwe gymeriadau. 431 00:18:47,220 --> 00:18:51,090 Beth y mae'n wirioneddol dychwelyd oedd deuwn i'r casgliad tro diwethaf? 432 00:18:51,090 --> 00:18:52,480 Cyfeiriad y cyntaf. 433 00:18:52,480 --> 00:18:56,650 Felly, rywsut, pan fyddwch yn galw getstring, mae'n dyrannu cyfran o cof ar gyfer 434 00:18:56,650 --> 00:18:59,620 y llinyn bod y math defnyddwyr a gyfeiriad, yna dychwelyd ohono. 435 00:18:59,620 --> 00:19:02,930 Ac mae'n ymddangos bod pan fyddwch am i gweithredu i ddyrannu cof yn y 436 00:19:02,930 --> 00:19:08,390 ffordd a dychwelyd i'r person a elwir yn swyddogaeth honno, y cyfeiriad y 437 00:19:08,390 --> 00:19:11,870 bod darn o gof, chi'n hollol Ni ellir ei roi yn y pentwr yn y 438 00:19:11,870 --> 00:19:14,750 gwaelod, oherwydd swyddogaethol dim ond mynd i beidio â dod yn eich un chi iawn 439 00:19:14,750 --> 00:19:17,800 yn gyflym, felly mae'n debyg y gallwch ddyfalu ble fwy na thebyg rydym yn mynd i daflu 440 00:19:17,800 --> 00:19:20,130 yn lle hynny, y domen fel y'u gelwir. 441 00:19:20,130 --> 00:19:25,290 >> Felly, rhwng gwaelod eich cof yn gosodiad a rhan uchaf eich cof yn 442 00:19:25,290 --> 00:19:26,820 cynllun yn criw cyfan o segmentau. 443 00:19:26,820 --> 00:19:29,270 Mae un yn y pentwr, ac i'r dde uchod, mae'n y domen. 444 00:19:29,270 --> 00:19:33,680 Ac domen yn unig yw darn gwahanol o cof nad yw ei defnyddio ar gyfer swyddogaethau 445 00:19:33,680 --> 00:19:34,770 pan fyddant yn galw. 446 00:19:34,770 --> 00:19:38,100 Mae'n cael ei ddefnyddio ar gyfer cof tymor hir, pan fydd chi am gael un swyddogaeth i afael rhai 447 00:19:38,100 --> 00:19:42,700 cof a gallu i ddal gafael ar ei heb golli rheolaeth drosto. 448 00:19:42,700 --> 00:19:45,550 >> Nawr gallech efallai unwaith weld nad yw hyn yn 449 00:19:45,550 --> 00:19:48,060 reidrwydd dyluniad perffaith. 450 00:19:48,060 --> 00:19:51,350 Wrth i'ch rhaglen dyrannu cof ar y simnai, neu wrth i chi alw mwy a 451 00:19:51,350 --> 00:19:55,540 mwy o swyddogaethau, neu wrth i chi ddyrannu cof ar y domen gyda malloc ffwrdd fel 452 00:19:55,540 --> 00:20:00,690 getstring yn ei wneud, beth yn glir ymddangos i fod yn broblem anochel? 453 00:20:00,690 --> 00:20:00,860 >> Iawn. 454 00:20:00,860 --> 00:20:03,150 Fel y ffaith bod saethau hyn yn pwyntio ar ei gilydd 455 00:20:03,150 --> 00:20:04,380 nid yw'n argoeli'n dda. 456 00:20:04,380 --> 00:20:08,630 Ac yn wir, gallem damwain gyflym iawn rhaglen mewn nifer o ffyrdd. 457 00:20:08,630 --> 00:20:12,050 Yn wir, yr wyf yn meddwl y gallai fod yn rhaid gwneud hyn yn ddamweiniol unwaith. 458 00:20:12,050 --> 00:20:14,020 Neu os nad ydych, gadewch i ni wneud hynny yn fwriadol yn awr. 459 00:20:14,020 --> 00:20:21,330 Gadewch i mi fynd yn ei flaen ac ysgrifennu super gyflym rhaglen o'r enw dontdothis.c. 460 00:20:21,330 --> 00:20:26,730 Ac yn awr byddaf yn mynd i mewn yma ac yn sydyn yn cynnwys stdio.h. 461 00:20:26,730 --> 00:20:32,620 Gadewch i ni ddatgan swyddogaeth foo yn cymryd unrhyw ddadleuon, sydd yn 462 00:20:32,620 --> 00:20:34,040 ddynodwyd yn dda gan ddi-rym. 463 00:20:34,040 --> 00:20:37,830 >> A'r unig beth foo yn mynd i wneud yw galwad foo, sydd nid yn ôl pob tebyg yn 464 00:20:37,830 --> 00:20:39,100 syniad smartest, ond dyna ni. 465 00:20:39,100 --> 00:20:40,490 Ent prif ddi-rym. 466 00:20:40,490 --> 00:20:45,270 Nawr yr unig beth prif yn mynd ei wneud yw ffonio foo hefyd. 467 00:20:45,270 --> 00:20:51,050 A dim ond ar gyfer cychwyn, yr wyf i'n mynd i fynd i ddod yma a dweud printf "Helo o 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 Felly, os nad oeddwn yn gwneud unrhyw gamgymeriadau, Gwnewch dontdothis dot slaes. 471 00:21:00,160 --> 00:21:01,960 A gadewch i ni wneud hynny mewn mwy o ffenestr - 472 00:21:01,960 --> 00:21:03,210 dot slaes, dontdothis. 473 00:21:03,210 --> 00:21:07,590 474 00:21:07,590 --> 00:21:08,840 Dewch ar. 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 Mae'n debyg, gallwch wneud hyn. 478 00:21:13,100 --> 00:21:15,190 Damia. 479 00:21:15,190 --> 00:21:16,190 OK. 480 00:21:16,190 --> 00:21:16,580 Aros. 481 00:21:16,580 --> 00:21:17,370 Sefyll yn ôl. 482 00:21:17,370 --> 00:21:18,270 A wnaethom ni - 483 00:21:18,270 --> 00:21:20,110 Ni ddim yn ei ddefnyddio gyda Gwneud. 484 00:21:20,110 --> 00:21:22,050 >> [Gynt] 485 00:21:22,050 --> 00:21:25,110 >> Rwy'n gwybod, ond rwy'n credu ein bod dim ond dileu hynny. 486 00:21:25,110 --> 00:21:28,410 Uh, ie. 487 00:21:28,410 --> 00:21:30,660 Damia. 488 00:21:30,660 --> 00:21:32,640 Ddatrys y Rob. 489 00:21:32,640 --> 00:21:34,678 Beth? 490 00:21:34,678 --> 00:21:35,928 Mae'n syml iawn. 491 00:21:35,928 --> 00:21:43,820 492 00:21:43,820 --> 00:21:47,360 Yeah, rydym yn troi optimization i ffwrdd. 493 00:21:47,360 --> 00:21:48,970 OK, yn sefyll bye. 494 00:21:48,970 --> 00:21:49,950 Nawr rwy'n teimlo'n well. 495 00:21:49,950 --> 00:21:51,390 OK. 496 00:21:51,390 --> 00:21:51,780 Mae pob hawl. 497 00:21:51,780 --> 00:21:53,430 >> Felly, gadewch i ni ail-grynhoi hyn - 498 00:21:53,430 --> 00:21:55,880 Gwnewch eich dontdothis. 499 00:21:55,880 --> 00:22:00,090 Efallai y bydd rhaid i chi ail-enwi hwn i dothis.c mewn dim ond munud. 500 00:22:00,090 --> 00:22:00,710 Dyna ni. 501 00:22:00,710 --> 00:22:01,240 Diolch yn fawr. 502 00:22:01,240 --> 00:22:02,050 OK. 503 00:22:02,050 --> 00:22:05,480 Felly, mae'r ffaith fy mod yn argraffu rhywbeth oedd mewn gwirionedd yn unig 504 00:22:05,480 --> 00:22:08,150 arafu i lawr y broses a ddefnyddiwn i fyddai wedi cyrraedd y pwynt hwnnw. 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 >> Felly, beth sy'n digwydd mewn gwirionedd? 508 00:22:11,180 --> 00:22:14,440 Y rheswm yno, dim ond wrth fynd heibio, yn gwneud unrhyw beth o ran mewnbwn a 509 00:22:14,440 --> 00:22:17,270 allbwn yn tueddu i fod yn arafach oherwydd eich rhaid i ysgrifennu cymeriadau at y 510 00:22:17,270 --> 00:22:18,600 sgrin, Mae wedi i sgrolio. 511 00:22:18,600 --> 00:22:21,720 Felly, stori hir yn fyr, roedd rhaid i mi mewn gwirionedd digwydd mor ddiamynedd, y byddai gennym 512 00:22:21,720 --> 00:22:23,260 gweld canlyniad hwn hefyd. 513 00:22:23,260 --> 00:22:26,220 Nawr fy mod wedi cael taith y print-ups, ydym yn ei weld ar unwaith. 514 00:22:26,220 --> 00:22:28,410 Felly pam mae hyn yn digwydd. 515 00:22:28,410 --> 00:22:31,300 Wel, yr esboniad syml, wrth gwrs, yw bod foo yn ôl pob tebyg ddylai 516 00:22:31,300 --> 00:22:32,500 yn galw ei hun. 517 00:22:32,500 --> 00:22:34,470 >> Nawr yn gyffredinol, mae hyn yn recursion. 518 00:22:34,470 --> 00:22:36,970 Ac rydym yn meddwl cwpl o wythnosau yn ôl recursive yn dda. 519 00:22:36,970 --> 00:22:40,330 Dychweliad yn y ffordd hudol mynegi eich hun super gryno. 520 00:22:40,330 --> 00:22:41,400 A 'i jyst yn gweithio. 521 00:22:41,400 --> 00:22:45,060 Ond mae yn nodwedd allweddol o'r holl y rhaglenni recursive rydym wedi siarad 522 00:22:45,060 --> 00:22:48,260 am ac yn edrych ar hyd yn hyn, a oedd eu bod yn cael beth? 523 00:22:48,260 --> 00:22:52,610 Mae achos sylfaenol, sef rhai caled codio achos a ddywedodd mewn rhai sefyllfaoedd 524 00:22:52,610 --> 00:22:56,210 peidiwch â galw foo, sy'n amlwg yn Nid yw yr achos yma. 525 00:22:56,210 --> 00:22:58,920 >> Felly, beth sy'n digwydd mewn gwirionedd o ran y llun? 526 00:22:58,920 --> 00:23:01,790 Wel, pan brif galwadau foo, mae'n yn cael sleisen o gof. 527 00:23:01,790 --> 00:23:04,150 Pan fydd yn galw foo foo, mae'n mynd sleisen o gof. 528 00:23:04,150 --> 00:23:06,430 Pan fydd yn galw foo foo, mae'n mynd yn dafell. 529 00:23:06,430 --> 00:23:07,080 Mae'n cael sleisen. 530 00:23:07,080 --> 00:23:08,120 Mae'n cael sleisen. 531 00:23:08,120 --> 00:23:09,460 Oherwydd foo byth yn dychwelyd. 532 00:23:09,460 --> 00:23:12,160 Nid ydym erioed yn dileu un o'r rhai a fframiau o'r pentwr. 533 00:23:12,160 --> 00:23:15,930 Felly, rydym yn chwythu drwy'r domen, nid sôn pwy a ŵyr beth arall, ac 534 00:23:15,930 --> 00:23:19,600 rydym yn rhy bell y ffiniau ein hyn a elwir yn segment o gof. 535 00:23:19,600 --> 00:23:21,790 Gamgymeriad mynd segmentu ffug. 536 00:23:21,790 --> 00:23:24,110 >> Felly, yr ateb mae amlwg nad ydynt yn gwneud hyn. 537 00:23:24,110 --> 00:23:28,830 Ond yr ymhlygiad fwy yw hynny, wrth gwrs, mae hollol beth terfyn, 538 00:23:28,830 --> 00:23:32,470 hyd yn oed os nad yw'n cael ei ddiffinio'n glir, o ran sut y llawer o swyddogaethau y gallwch chi alw mewn 539 00:23:32,470 --> 00:23:34,970 rhaglen, sawl gwaith y swyddogaeth yn gallu galw ei hun. 540 00:23:34,970 --> 00:23:38,430 Felly, er ein bod yn gwneud pregethu recursion gan fod hyn yn beth allai fod yn hudolus a 541 00:23:38,430 --> 00:23:41,870 cwpl o wythnosau yn ôl ar gyfer y sigma swyddogaeth, a phan fyddwn yn cael y data 542 00:23:41,870 --> 00:23:45,270 strwythurau a CS50, byddwch yn gweld eraill ceisiadau ar ei gyfer, nid yw'n 543 00:23:45,270 --> 00:23:46,500 reidrwydd y peth gorau. 544 00:23:46,500 --> 00:23:50,070 Oherwydd os yw swyddogaeth yn galw ei hun, galw ei hun, hyd yn oed os oes sylfaen 545 00:23:50,070 --> 00:23:54,860 achos, os nad ydych yn taro yr achos sylfaenol ar gyfer 1,000 o alwadau neu 10,000 o alwadau, gan 546 00:23:54,860 --> 00:23:58,800 yr adeg honno efallai eich bod wedi rhedeg allan o le ar eich corn hyn a elwir a tharo 547 00:23:58,800 --> 00:24:00,400 rhai rhannau eraill o gof. 548 00:24:00,400 --> 00:24:03,950 Felly, yn rhy yn ddyluniad cyfaddawd rhwng ceinder a rhwng 549 00:24:03,950 --> 00:24:06,920 cadernid eich benodol gweithredu. 550 00:24:06,920 --> 00:24:10,780 >> Felly mae anfantais arall neu gotcha arall ar yr hyn rydym wedi 551 00:24:10,780 --> 00:24:11,720 bod yn ei wneud hyd yn hyn. 552 00:24:11,720 --> 00:24:12,980 Pan fyddaf yn galw getstring - 553 00:24:12,980 --> 00:24:15,120 gadewch i mi fynd yn ôl i mewn i helo-2. 554 00:24:15,120 --> 00:24:18,170 Hysbysu fy mod i'n galw getstring, sydd yn dychwelyd cyfeiriad. 555 00:24:18,170 --> 00:24:20,730 Ac rydym yn honni heddiw sy'n mynd i'r afael yn dod o'r domen. 556 00:24:20,730 --> 00:24:24,480 Ac yn awr yr wyf yn argraffu allan y llinyn yn y cyfeiriad hwnnw. 557 00:24:24,480 --> 00:24:27,000 Ond nid ydym erioed wedi galw y gyferbyn getstring. 558 00:24:27,000 --> 00:24:30,850 Nid ydym erioed wedi gorfod calll swyddogaeth fel ungetstring, lle'r ydych yn llaw yn ôl 559 00:24:30,850 --> 00:24:31,610 bod y cof. 560 00:24:31,610 --> 00:24:33,250 Ond dweud y gwir mae'n debyg Dylai wedi bod. 561 00:24:33,250 --> 00:24:37,390 Oherwydd os ydym yn dal i ofyn y cyfrifiadur ar gyfer cof, drwy rywun fel 562 00:24:37,390 --> 00:24:40,830 getstring ond byth yn rhoi yn ôl, yn sicr hynny hefyd yn sicr o arwain at 563 00:24:40,830 --> 00:24:42,970 problemau lle rydym yn rhedeg allan o gof. 564 00:24:42,970 --> 00:24:46,140 >> Ac yn wir, gallwn edrych am y problemau gyda'r offeryn newydd y mae eu defnydd 565 00:24:46,140 --> 00:24:47,640 braidd yn cryptig i deipio. 566 00:24:47,640 --> 00:24:50,960 Ond gadewch i mi fynd yn ei flaen ac yn tasgu i fyny ar y sgrin mewn dim ond hyn o bryd. 567 00:24:50,960 --> 00:24:56,940 Rydw i'n mynd i fynd yn ei flaen a rhedeg Valgrind gyda paramedr mae eu meistrolaeth gyntaf 568 00:24:56,940 --> 00:25:00,260 ymresymiad llinell yw'r enw o'r rhaglen helo-2. 569 00:25:00,260 --> 00:25:02,650 Ac yn anffodus mae'n allbwn yn atrociously 570 00:25:02,650 --> 00:25:04,290 gymhleth heb reswm da. 571 00:25:04,290 --> 00:25:06,280 Felly, rydym yn gweld popeth a llanast. 572 00:25:06,280 --> 00:25:07,530 Mae David yn datgan fy enw i. 573 00:25:07,530 --> 00:25:09,760 Felly dyna y rhaglen mewn gwirionedd yn rhedeg. 574 00:25:09,760 --> 00:25:11,180 Ac yn awr rydym yn cael allbwn hwn. 575 00:25:11,180 --> 00:25:13,400 >> Felly Valgrind yn debyg mewn ysbryd i GDB. 576 00:25:13,400 --> 00:25:14,950 Nid yw'n debugger per se. 577 00:25:14,950 --> 00:25:16,270 Ond mae'n gwiriwr cof. 578 00:25:16,270 --> 00:25:20,140 Mae'n rhaglen a fydd yn rhedeg eich rhaglennu ac yn dweud wrthych os ydych yn gofyn i 579 00:25:20,140 --> 00:25:23,860 cyfrifiadur ar gyfer cof a pheidiwch byth â rhoi ei yn ôl, a thrwy hynny sy'n golygu eich bod wedi 580 00:25:23,860 --> 00:25:24,570 yn gollwng cof. 581 00:25:24,570 --> 00:25:26,240 A gollyngiadau cof yn tueddu i fod yn ddrwg. 582 00:25:26,240 --> 00:25:29,120 A ydych yn ddefnyddwyr cyfrifiaduron yn ôl pob tebyg yn teimlo hyn, p'un a oes gennych 583 00:25:29,120 --> 00:25:30,300 Mac neu PC. 584 00:25:30,300 --> 00:25:33,730 Ydych chi erioed wedi defnyddio eich cyfrifiadur ar gyfer tra ac nid hailgychwyn mewn sawl 585 00:25:33,730 --> 00:25:36,820 diwrnod, neu os ydych wedi jyst got a llawer o rhaglenni rhedeg, a'r peth damn 586 00:25:36,820 --> 00:25:42,360 arafu i stop malu, neu o leiaf 'i' super blino i'w ddefnyddio, oherwydd 587 00:25:42,360 --> 00:25:44,350 popeth jyst got super araf. 588 00:25:44,350 --> 00:25:46,260 >> Nawr gall fod yn unrhyw nifer o resymau. 589 00:25:46,260 --> 00:25:49,600 Gallai fod yn ddolen ddiddiwedd, nam yn Cod rhywun, neu, yn fwy syml, mae'n 590 00:25:49,600 --> 00:25:53,250 Gallai olygu eich bod yn defnyddio mwy o cof, neu'n ceisio, na'ch 591 00:25:53,250 --> 00:25:54,920 mewn gwirionedd wedi cyfrifiadur. 592 00:25:54,920 --> 00:25:57,770 Ac efallai mae 'na bug mewn rhai rhaglen sy'n cadw gofyn am cof. 593 00:25:57,770 --> 00:26:02,480 Porwyr ar gyfer y blynyddoedd oedd yn enwog am hyn, yn gofyn am fwy a mwy o gof 594 00:26:02,480 --> 00:26:03,870 ond byth yn dosbarthu yn ôl. 595 00:26:03,870 --> 00:26:07,220 Yn sicr, os mai dim ond yn gyfyngedig faint o gof, ni allwch ofyn 596 00:26:07,220 --> 00:26:09,990 anfeidrol o weithiau ar gyfer rhywfaint o'r cof. 597 00:26:09,990 --> 00:26:13,070 >> Ac felly yr hyn yr ydych yn gweld yma, er bod eto allbwn Valgrind yn 598 00:26:13,070 --> 00:26:17,490 ddiangen gymhleth i cipolwg ar gyntaf, mae hyn yn rhan ddiddorol. 599 00:26:17,490 --> 00:26:18,890 Heap - 600 00:26:18,890 --> 00:26:20,060 yn cael eu defnyddio wrth ymadael. 601 00:26:20,060 --> 00:26:22,810 Felly dyma faint o gof oedd yn cael eu defnyddio yn y domen yn y 602 00:26:22,810 --> 00:26:24,300 amser fy rhaglen wedi gadael - 603 00:26:24,300 --> 00:26:27,280 mae'n debyg chwe bytes mewn un bloc. 604 00:26:27,280 --> 00:26:28,710 Felly, yr wyf i'n mynd i chwifio fy nwylo ar yr hyn y mae bloc. 605 00:26:28,710 --> 00:26:31,270 Feddwl am y peth yn unig yw darn, a mwy gair technegol ar gyfer darn. 606 00:26:31,270 --> 00:26:33,140 Ond chwe bytes - 607 00:26:33,140 --> 00:26:36,870 beth yw'r chwe bytes sy'n yn dal yn cael eu defnyddio? 608 00:26:36,870 --> 00:26:37,390 >> Yn union. 609 00:26:37,390 --> 00:26:41,520 D-A-V-I-D slaes sero, pum llythyr enw yn ogystal â'r null terminator. 610 00:26:41,520 --> 00:26:46,350 Felly mae hyn yn rhaglen Valgrind sylwi fy mod Gofynnwyd am chwe bytes, mae'n debyg, gan 611 00:26:46,350 --> 00:26:48,950 ffordd o getstring, ond byth yn Rhoddodd yn ôl. 612 00:26:48,950 --> 00:26:52,030 Ac yn wir, efallai na fydd hyn fod mor amlwg os nad yw fy rhaglen yn dair 613 00:26:52,030 --> 00:26:53,590 llinellau, ond mae'n 300 o linellau. 614 00:26:53,590 --> 00:26:56,920 Er mwyn i ni mewn gwirionedd yn rhoi gorchymyn arall ymresymiad llinell i Valgrind i 615 00:26:56,920 --> 00:26:58,290 gwneud yn fwy verbose. 616 00:26:58,290 --> 00:26:59,760 Mae'n ychydig yn blino i'w gofio. 617 00:26:59,760 --> 00:27:01,580 Ond os wyf yn gwneud - 618 00:27:01,580 --> 00:27:01,930 gadewch i ni weld. 619 00:27:01,930 --> 00:27:03,540 Gollwng - 620 00:27:03,540 --> 00:27:05,030 A oedd yn gollwng - 621 00:27:05,030 --> 00:27:07,580 hyd yn oed Nid wyf yn cofio beth ydyw oddi ar law. 622 00:27:07,580 --> 00:27:08,550 >> - Gollwng-wiriad hafal llawn. 623 00:27:08,550 --> 00:27:10,180 Yep, diolch i chi. 624 00:27:10,180 --> 00:27:12,520 - Gollwng-wiriad hafal llawn. 625 00:27:12,520 --> 00:27:13,800 Enter. 626 00:27:13,800 --> 00:27:14,940 Un rhaglen yn rhedeg. 627 00:27:14,940 --> 00:27:16,180 Deipio David eto. 628 00:27:16,180 --> 00:27:17,660 Nawr rwy'n gweld ychydig mwy o fanylion. 629 00:27:17,660 --> 00:27:20,890 Ond yn is na'r crynodeb domen, sy'n yn union yr un fath i bedwar - AH, 630 00:27:20,890 --> 00:27:22,120 mae hyn yn fath o 'n glws. 631 00:27:22,120 --> 00:27:25,460 Nawr Valgrind yn edrych mewn gwirionedd ychydig yn galetach yn fy cod. 632 00:27:25,460 --> 00:27:29,580 Ac mae'n dweud, mae'n debyg, malloc at linell - 633 00:27:29,580 --> 00:27:30,580 rydym yn chwyddo allan. 634 00:27:30,580 --> 00:27:31,980 Ar-lein - 635 00:27:31,980 --> 00:27:32,930 Nid ydym yn gweld yr hyn y llinell ydyw. 636 00:27:32,930 --> 00:27:35,110 Ond malloc yw'r culprit cyntaf. 637 00:27:35,110 --> 00:27:38,630 Mae blog yn malloc. 638 00:27:38,630 --> 00:27:39,810 >> Mae pob hawl? 639 00:27:39,810 --> 00:27:40,450 OK, dim. 640 00:27:40,450 --> 00:27:40,940 Iawn? 641 00:27:40,940 --> 00:27:42,520 Gelwais getstring. 642 00:27:42,520 --> 00:27:44,460 getstring pob golwg yn galw malloc. 643 00:27:44,460 --> 00:27:47,800 Felly, pa linell o god yn ôl pob golwg ar fai am gael 644 00:27:47,800 --> 00:27:49,050 dyrannu cof hwn? 645 00:27:49,050 --> 00:27:51,560 646 00:27:51,560 --> 00:27:55,540 Gadewch i ni dybio bod pwy bynnag ysgrifennodd malloc wedi bod o gwmpas yn ddigon hir ei fod yn 647 00:27:55,540 --> 00:27:56,390 Nid eu bai nhw. 648 00:27:56,390 --> 00:27:57,520 Felly, mae'n debyg fy. 649 00:27:57,520 --> 00:28:02,000 getstring yn cs50.c - fel bod 'na ffeilio yn rhywle ar y cyfrifiadur - 650 00:28:02,000 --> 00:28:05,210 yn unol 286 yn ymddangos i fod y tramgwyddwr. 651 00:28:05,210 --> 00:28:08,140 Nawr, gadewch i ni dybio bod CS50 wedi bod yn o gwmpas am swm gweddus o amser, felly 652 00:28:08,140 --> 00:28:09,720 rydym hefyd yn anffaeledig. 653 00:28:09,720 --> 00:28:14,080 Ac felly yn ôl pob tebyg yn nad ydynt mewn getstring bod y nam yn gorwedd, ond yn hytrach yn 654 00:28:14,080 --> 00:28:17,810 lein helo-2.c 18. 655 00:28:17,810 --> 00:28:20,670 >> Felly, gadewch i ni edrych ar beth yw'r llinell 18 oedd. 656 00:28:20,670 --> 00:28:21,130 Oh. 657 00:28:21,130 --> 00:28:27,130 Rhywsut nid y llinell hon o anghenraid bygi, fel y cyfryw, ond y rheswm 658 00:28:27,130 --> 00:28:28,630 y tu ôl i'r gollwng cof. 659 00:28:28,630 --> 00:28:32,140 Felly super syml, beth fyddai yn reddfol yw'r ateb yma? 660 00:28:32,140 --> 00:28:34,710 Os ydym yn gofyn am cof, roedd byth roi yn ôl, ac mae'n ymddangos i fod yn 661 00:28:34,710 --> 00:28:37,940 broblem oherwydd dros amser fy nghyfrifiadur gallai rhedeg allan o gof, efallai araf 662 00:28:37,940 --> 00:28:42,110 i lawr, gall pethau drwg yn digwydd, yn dda, beth yw'r ateb sythweledol syml? 663 00:28:42,110 --> 00:28:43,140 Jyst roi yn ôl. 664 00:28:43,140 --> 00:28:44,770 >> Sut yr ydych yn rhad ac am ddim i fyny y cof? 665 00:28:44,770 --> 00:28:49,970 Wel, diolch i'r drefn, mae'n eithaf syml i ddim ond dweud enw rhad ac am ddim. 666 00:28:49,970 --> 00:28:51,260 Ac nid ydym erioed wedi gwneud hyn o'r blaen. 667 00:28:51,260 --> 00:28:55,890 Ond gallwch hanfod feddwl am am ddim fel y gwrthwyneb i malloc. 668 00:28:55,890 --> 00:28:58,030 rhad ac am ddim yn y gwrthwyneb o dyrannu cof. 669 00:28:58,030 --> 00:28:59,540 Felly nawr gadewch i mi ail-grynhoi hyn. 670 00:28:59,540 --> 00:29:02,050 Gwneud helo-2. 671 00:29:02,050 --> 00:29:04,620 Gadewch i mi redeg eto. helo-2 David. 672 00:29:04,620 --> 00:29:07,290 Felly, mae'n ymddangos i weithio yn yn union yr un ffordd. 673 00:29:07,290 --> 00:29:11,180 Ond os byddaf yn mynd yn ôl i Valgrind ac ail-redeg yr un gorchymyn ar fy newydd 674 00:29:11,180 --> 00:29:14,720 rhaglen a luniwyd, teipio yn fy enw fel o'r blaen - 675 00:29:14,720 --> 00:29:15,370 'n glws. 676 00:29:15,370 --> 00:29:16,760 Crynodeb Heap - 677 00:29:16,760 --> 00:29:17,740 yn cael eu defnyddio wrth ymadael - 678 00:29:17,740 --> 00:29:19,370 sero bytes mewn blociau sero. 679 00:29:19,370 --> 00:29:21,840 Ac mae hyn yn super 'n glws, pob blociau domen eu rhyddhau. 680 00:29:21,840 --> 00:29:23,480 Unrhyw ollyngiadau yn bosibl. 681 00:29:23,480 --> 00:29:27,200 >> Felly, yn dod i fyny, nid gyda Set Problem 4, ond gyda Set Problem 5, mae'r fforensig 682 00:29:27,200 --> 00:29:30,740 ac ymlaen, mae hyn hefyd yn dod yn mesur o gywirdeb eich 683 00:29:30,740 --> 00:29:33,630 rhaglen, p'un a oes gennych neu nid oes rhaid gollwng cof. 684 00:29:33,630 --> 00:29:36,900 Ond diolch byth, nid dim ond chi all resymu drwyddynt reddfol, sy'n 685 00:29:36,900 --> 00:29:40,430 , gellid dadlau, yn hawdd ar gyfer rhaglenni bach ond yn fwy anodd ar gyfer rhaglenni mwy, 686 00:29:40,430 --> 00:29:43,860 Valgrind, ar gyfer rhaglenni mwy hynny, eich helpu i nodi 687 00:29:43,860 --> 00:29:45,360 y broblem benodol. 688 00:29:45,360 --> 00:29:47,500 >> Ond mae un broblem arall a allai godi. 689 00:29:47,500 --> 00:29:51,245 Gadewch i mi agor y ffeil yma, sydd, unwaith eto, yn enghraifft braidd yn syml. 690 00:29:51,245 --> 00:29:53,760 Ond gadewch i ni ganolbwyntio ar yr hyn y rhaglen hon yn ei wneud. 691 00:29:53,760 --> 00:29:55,190 Gelwir hyn yn memory.c. 692 00:29:55,190 --> 00:29:58,380 Byddwn yn hyn yn nes ymlaen heddiw yn postio yn y zip o cod ffynhonnell heddiw. 693 00:29:58,380 --> 00:30:01,610 Ac yn sylwi bod gen i swyddogaeth o'r enw f sy'n cymryd unrhyw ddadleuon a 694 00:30:01,610 --> 00:30:02,800 dychwelyd dim. 695 00:30:02,800 --> 00:30:07,240 Yn unol 20, rwy'n debyg datgan pwyntydd i int a galw yn x. 696 00:30:07,240 --> 00:30:09,570 Rwy'n aseinio yw'r elw gwerth malloc. 697 00:30:09,570 --> 00:30:14,590 A dim ond i fod yn glir, faint o bytes yb Yn ôl pob tebyg i'n cael yn ôl o malloc 698 00:30:14,590 --> 00:30:17,080 yn y sefyllfa hon? 699 00:30:17,080 --> 00:30:18,040 >> Mae'n debyg 40. 700 00:30:18,040 --> 00:30:18,840 Ble yr ydych yn yr arian hwnnw? 701 00:30:18,840 --> 00:30:22,410 Wel, os ydych yn cofio i int yn aml yn 4 bytes, o leiaf mae yn y 702 00:30:22,410 --> 00:30:25,110 peiriant, 10 gwaith 4 yn amlwg 40. 703 00:30:25,110 --> 00:30:28,920 Felly malloc yn dychwelyd i gyfeiriad darn o gof a storio y 704 00:30:28,920 --> 00:30:30,800 mynd i'r afael yn y pen draw yn x. 705 00:30:30,800 --> 00:30:32,570 Felly, i fod yn glir, beth Yna yn digwydd? 706 00:30:32,570 --> 00:30:34,990 Wel, gadewch i mi newid yn ôl at ein darlun yma. 707 00:30:34,990 --> 00:30:38,150 Gadewch i mi nid yn unig yn tynnu waelod fy cof cyfrifiadur, gadewch i mi fynd yn ei flaen a 708 00:30:38,150 --> 00:30:42,990 tynnu y petryal gyfan sy'n cynrychioli pob un fy RAM. 709 00:30:42,990 --> 00:30:44,790 >> Byddwn yn dweud bod y pentwr ar y gwaelod. 710 00:30:44,790 --> 00:30:47,010 Ac mae 'na segment testun yn y data a uninitialized. 711 00:30:47,010 --> 00:30:49,880 Ond dw i'n jyst yn mynd i'r rhai haniaethol pethau eraill i ffwrdd â dot, dot dot. 712 00:30:49,880 --> 00:30:53,470 Im 'jyst yn mynd i gyfeirio at y gan fod y domen ar y brig. 713 00:30:53,470 --> 00:30:57,070 Ac yna ar waelod y llun, i gynrychioli'r prif, dw i'n mynd 714 00:30:57,070 --> 00:30:59,880 i roi cynnig cof sleisys ar y pentwr. 715 00:30:59,880 --> 00:31:03,150 Er f, dw i'n mynd i roi cynnig sleisen o gof ar y pentwr. 716 00:31:03,150 --> 00:31:05,140 Yn awr, yr wyf yn rhaid i ymgynghori fy cod ffynhonnell eto. 717 00:31:05,140 --> 00:31:07,170 Beth yw'r newidynnau lleol ar gyfer y prif? 718 00:31:07,170 --> 00:31:10,710 Mae'n debyg dim byd, fel y sleisen yn gwag yn effeithiol, neu hyd yn oed mor fawr 719 00:31:10,710 --> 00:31:11,600 fel yr wyf wedi tynnu ei. 720 00:31:11,600 --> 00:31:15,730 Ond yn f, mae gen i newidyn lleol, a elwir yn x. 721 00:31:15,730 --> 00:31:20,410 Felly, yr wyf i'n mynd i fynd yn ei flaen ac yn rhoi f darn o gof, yn galw yn x. 722 00:31:20,410 --> 00:31:24,680 >> Ac yn awr malloc o 10 gwaith 4, Felly malloc 40, ble y 723 00:31:24,680 --> 00:31:25,430 cof yn dod o? 724 00:31:25,430 --> 00:31:27,530 Nid ydym wedi tynnu llun fel hyn o'r blaen. 725 00:31:27,530 --> 00:31:31,140 Ond gadewch i ni dybio ei fod yn effeithiol dod oddi yma, felly un, 726 00:31:31,140 --> 00:31:33,170 dau, tri, pedwar, pump. 727 00:31:33,170 --> 00:31:34,680 Ac yn awr mae angen i mi 40 o'r rhain. 728 00:31:34,680 --> 00:31:37,540 Felly, 'n annhymerus' jyst yn gwneud dot, dot, dot i awgrymu y mae hyd yn oed mwy o gof 729 00:31:37,540 --> 00:31:39,350 dod yn ôl oddi wrth y domen. 730 00:31:39,350 --> 00:31:40,710 Nawr, beth yw'r cyfeiriad? 731 00:31:40,710 --> 00:31:42,620 Gadewch i ni ddewis ein mympwyol mynd i'r afael fel bob amser - 732 00:31:42,620 --> 00:31:46,310 Ox123, hyd yn oed er 'i' yn ôl pob tebyg yn mynd i fod yn rhywbeth hollol wahanol. 733 00:31:46,310 --> 00:31:50,420 Dyna'r cyfeiriad y beit cyntaf yn cof fy mod yn gofyn malloc amdano. 734 00:31:50,420 --> 00:31:53,630 >> Felly, yn fyr, ar ôl llinell 20 executes, hyn yn llythrennol 735 00:31:53,630 --> 00:31:57,170 storio y tu mewn o x yma? 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 Ac mae'r Ychen yn anniddorol. 739 00:32:01,550 --> 00:32:03,200 Mae'n jyst yn golygu dyma rhif hecsadegol. 740 00:32:03,200 --> 00:32:06,490 Ond yr hyn sy'n allweddol yw bod yr hyn yr wyf i wedi storio yn x, sydd yn newidyn lleol. 741 00:32:06,490 --> 00:32:10,260 Ond mae ei fath ddata, unwaith eto, yn gyfeiriad o int. 742 00:32:10,260 --> 00:32:12,710 Wel, dw i'n mynd i storio Ox123. 743 00:32:12,710 --> 00:32:16,610 Ond unwaith eto, os yw hynny'n ychydig yn rhy gymhleth ddiangen, os wyf yn sgrolio 744 00:32:16,610 --> 00:32:21,490 yn ôl, gallwn dynnu hyn i ffwrdd yn eithaf rhesymol a dim ond dweud bod x yn 745 00:32:21,490 --> 00:32:23,910 pwyntydd i'r darn o gof. 746 00:32:23,910 --> 00:32:24,070 >> OK. 747 00:32:24,070 --> 00:32:26,230 Nawr bod y cwestiwn wrth law yw'r canlynol - 748 00:32:26,230 --> 00:32:29,910 llinell 21, mae'n troi allan, yn bygi. 749 00:32:29,910 --> 00:32:31,160 Pam? 750 00:32:31,160 --> 00:32:34,890 751 00:32:34,890 --> 00:32:36,930 >> Mae'n ddrwg gennym? 752 00:32:36,930 --> 00:32:38,640 Nid oes ganddo - 753 00:32:38,640 --> 00:32:40,390 dweud bod unwaith eto. 754 00:32:40,390 --> 00:32:41,240 Wel, nid yw'n rhad ac am ddim. 755 00:32:41,240 --> 00:32:42,350 Felly, dyna'r ail ond. 756 00:32:42,350 --> 00:32:45,000 Felly, mae un arall ond yn benodol yn llinell 21. 757 00:32:45,000 --> 00:32:49,480 758 00:32:49,480 --> 00:32:50,040 >> Yn union. 759 00:32:50,040 --> 00:32:54,980 Mae'r llinell hon yn syml o god yn unig yw gorlif byffer, a gor-redeg byffer. 760 00:32:54,980 --> 00:32:57,050 Mae byffer yn unig yn golygu darn o gof. 761 00:32:57,050 --> 00:33:01,520 Ond y darn o gof o faint 10, 10 cyfanrifau, sy'n golygu os ydym yn 762 00:33:01,520 --> 00:33:05,350 mynegai i mewn gan ddefnyddio'r siwgr cystrawennol o nodiant amrywiaeth, y sgwâr 763 00:33:05,350 --> 00:33:09,220 cromfachau, rydych yn cael mynediad at x braced braced 0 x 1 x, 764 00:33:09,220 --> 00:33:10,390 braced dot, dot, dot. 765 00:33:10,390 --> 00:33:13,270 x braced 9 yw'r un mwyaf. 766 00:33:13,270 --> 00:33:17,680 Felly, os wyf yn gwneud x braced 10, lle Rydw i'n wir yn mynd yn y cof? 767 00:33:17,680 --> 00:33:19,120 >> Wel, os wyf wedi 10 int - 768 00:33:19,120 --> 00:33:21,070 gadewch i ni mewn gwirionedd yn tynnu pob o'r rhain yma. 769 00:33:21,070 --> 00:33:22,700 Felly yr oedd y pum cyntaf. 770 00:33:22,700 --> 00:33:24,660 Dyma y pum ints eraill. 771 00:33:24,660 --> 00:33:29,580 Felly x braced 0 yma. x braced 1 yn yma. x braced 9 yma. x braced 772 00:33:29,580 --> 00:33:37,960 10 yma, sy'n golygu yr wyf yn dweud, yn unol 21, y cyfrifiadur i roi'r 773 00:33:37,960 --> 00:33:39,400 nifer ble? 774 00:33:39,400 --> 00:33:42,010 Mae nifer 0 ble? 775 00:33:42,010 --> 00:33:43,380 Wel, mae'n 0, ie. 776 00:33:43,380 --> 00:33:45,460 Ond dim ond y ffaith bod ei 0 yn fath o gyd-ddigwyddiad. 777 00:33:45,460 --> 00:33:47,140 Gallai fod yn y nifer 50, ar gyfer yr holl ydym yn gofalu. 778 00:33:47,140 --> 00:33:50,480 Ond rydym yn ceisio sicrhau ei fod wrth x braced 10, a dyna lle mae hyn yn 779 00:33:50,480 --> 00:33:53,700 marc cwestiwn yn cael ei lunio, a nid yw'n beth da. 780 00:33:53,700 --> 00:33:57,070 Gallai hyn rhaglen yn dda iawn damwain o ganlyniad. 781 00:33:57,070 --> 00:33:59,400 >> Yn awr, gadewch i ni fynd yn ei flaen i weld os yw hyn yn yw, yn wir, beth sy'n digwydd. 782 00:33:59,400 --> 00:34:02,600 Gwneud cof, gan fod y ffeil Gelwir memory.c. 783 00:34:02,600 --> 00:34:05,950 Gadewch i ni fynd yn ei flaen ac yn rhedeg y cof rhaglen. 784 00:34:05,950 --> 00:34:08,239 Felly, rydym yn got 'n ffodus, mewn gwirionedd, mae'n ymddangos. 785 00:34:08,239 --> 00:34:09,340 Rydym yn cael lwcus. 786 00:34:09,340 --> 00:34:11,060 Ond gadewch i ni weld os ydym yn awr yn rhedeg Valgrind. 787 00:34:11,060 --> 00:34:14,170 Ar yr olwg gyntaf, efallai fy rhaglen yn ymddangos i fod yn hollol gywir. 788 00:34:14,170 --> 00:34:18,010 Ond gadewch i mi redeg Valgrind gyda'r - Gollwng-wiriad hafal llawn ar y cof. 789 00:34:18,010 --> 00:34:20,110 >> Ac yn awr pan fyddaf yn rhedeg hyn - 790 00:34:20,110 --> 00:34:21,030 diddorol. 791 00:34:21,030 --> 00:34:26,800 Annilys ysgrifennu o faint 4 yng llinell 21 memory.c. 792 00:34:26,800 --> 00:34:29,284 Llinell 21 o memory.c yw pa un? 793 00:34:29,284 --> 00:34:30,340 O, diddorol. 794 00:34:30,340 --> 00:34:31,080 Ond arhoswch. 795 00:34:31,080 --> 00:34:32,389 Maint 4, beth yw hynny yn cyfeirio? 796 00:34:32,389 --> 00:34:34,969 Dim ond yn un ysgrifennu, ond mae'n o faint 4. 797 00:34:34,969 --> 00:34:36,889 Pam ei fod yn 4? 798 00:34:36,889 --> 00:34:39,280 Mae'n oherwydd ei fod yn int, sy'n yw, unwaith eto, pedwar bytes. 799 00:34:39,280 --> 00:34:42,510 Felly Valgrind o hyd i chwilen yr wyf fi, glancing ar fy cod, nid oedd. 800 00:34:42,510 --> 00:34:45,040 Ac efallai y byddai eich TF neu na fyddai. 801 00:34:45,040 --> 00:34:48,469 Beth Ond Valgrind yn sicr fod rydym wedi gwneud camgymeriad yno, hyd yn oed 802 00:34:48,469 --> 00:34:52,719 er ein bod got 'n ffodus, a'r cyfrifiadur penderfynu, eh, dydw i ddim yn mynd i ddamwain 803 00:34:52,719 --> 00:34:57,470 dim ond oherwydd eich cyffwrdd un beit, un gwerth int o cof nad oeddech 804 00:34:57,470 --> 00:34:58,550 mewn gwirionedd ei hun. 805 00:34:58,550 --> 00:35:00,380 >> Wel, beth arall yn buggy yma. 806 00:35:00,380 --> 00:35:01,180 Cyfeiriad - 807 00:35:01,180 --> 00:35:03,190 yw'n un cyfeiriad yn edrych crazy yn hecsadegol. 808 00:35:03,190 --> 00:35:06,890 Mai dim ond yn golygu rhywle yn y domen yn sero bytes ar ôl bloc o faint 40 809 00:35:06,890 --> 00:35:07,620 ei ddyrannu. 810 00:35:07,620 --> 00:35:10,610 Gadewch i mi chwyddo allan yma a gweld os mae hyn yn ychydig yn fwy defnyddiol. 811 00:35:10,610 --> 00:35:11,410 Diddorol. 812 00:35:11,410 --> 00:35:15,600 40 bytes cael eu colli bendant yng nghofnod colli 1 o 1. 813 00:35:15,600 --> 00:35:17,840 Unwaith eto, mae mwy o eiriau nag yn ddefnyddiol yma. 814 00:35:17,840 --> 00:35:21,350 Ond yn seiliedig ar y llinellau a amlygwyd, lle y mae'n debyg y dylwn ganolbwyntio fy 815 00:35:21,350 --> 00:35:24,070 sylw ar gyfer bug arall? 816 00:35:24,070 --> 00:35:26,570 Edrych yn debyg i linell 20 o memory.c. 817 00:35:26,570 --> 00:35:30,990 >> Felly, os ydym yn mynd yn ôl i linell 20, dyna'r un a nodwyd gennych yn gynharach. 818 00:35:30,990 --> 00:35:33,030 Ac nid o reidrwydd bygi. 819 00:35:33,030 --> 00:35:35,160 Ond rydym wedi hyn wrthdroi ei effeithiau. 820 00:35:35,160 --> 00:35:38,790 Felly, sut ydw i'n cywiro o leiaf un o'r camgymeriadau hynny? 821 00:35:38,790 --> 00:35:42,240 Beth allwn i ei wneud ar ôl llinell 21? 822 00:35:42,240 --> 00:35:47,110 Gallwn i wneud yn rhad ac am x, felly mae i roi'r cof ôl. 823 00:35:47,110 --> 00:35:49,230 A sut ydw i'n atgyweiria bug hon? 824 00:35:49,230 --> 00:35:52,120 Ddylwn i bendant yn mynd dim farther na 0. 825 00:35:52,120 --> 00:35:53,670 Felly, gadewch i mi ceisio ail-redeg y. 826 00:35:53,670 --> 00:35:56,080 Mae'n ddrwg gennym, yn bendant yn mynd dim farther na 9. 827 00:35:56,080 --> 00:35:57,510 Gwneud cof. 828 00:35:57,510 --> 00:36:00,650 Gadewch i mi ailgynnal Valgrind mewn mwy ffenestr. 829 00:36:00,650 --> 00:36:01,580 Ac yn awr yn edrych. 830 00:36:01,580 --> 00:36:02,250 Nice. 831 00:36:02,250 --> 00:36:03,270 Mae'r holl blociau domen eu rhyddhau. 832 00:36:03,270 --> 00:36:04,270 Unrhyw ollyngiadau yn bosibl. 833 00:36:04,270 --> 00:36:07,520 Ac uwchben yma, does dim sôn unrhyw fwy o'r hawl annilys. 834 00:36:07,520 --> 00:36:09,820 >> Dim ond i gael barus, a gadewch i ni weld a oes enghraifft arall 835 00:36:09,820 --> 00:36:11,050 nid yw'n mynd fel y bwriadwyd - 836 00:36:11,050 --> 00:36:12,560 I ddim yn cael lwcus funud yn ôl. 837 00:36:12,560 --> 00:36:15,530 Ac mae'r ffaith bod hyn yn 0 efallai ddiangen gamarweiniol. 838 00:36:15,530 --> 00:36:20,650 Gadewch i ni dim ond gwneud 50, a braidd yn fympwyol nifer, yn gwneud cof dot slaes cof - 839 00:36:20,650 --> 00:36:21,410 yn dal i gael lwcus. 840 00:36:21,410 --> 00:36:22,510 Nid oes dim sy'n chwalu. 841 00:36:22,510 --> 00:36:26,150 Gadewch i ni dybio Fi jyst gwneud rhywbeth gwirioneddol ffôl, ac yr wyf yn 100. 842 00:36:26,150 --> 00:36:30,360 Gadewch i mi ail-wneud cof, dot slaes cof - 843 00:36:30,360 --> 00:36:31,075 got 'n ffodus eto. 844 00:36:31,075 --> 00:36:32,800 Beth am 1,000? 845 00:36:32,800 --> 00:36:35,370 ints y tu hwnt, yn fras, ble ddylwn i fod? 846 00:36:35,370 --> 00:36:37,410 Gwneud cof - 847 00:36:37,410 --> 00:36:38,570 damn iddo. 848 00:36:38,570 --> 00:36:39,920 >> [Chwerthin] 849 00:36:39,920 --> 00:36:41,270 >> OK. 850 00:36:41,270 --> 00:36:43,920 Gadewch i ni llanast o gwmpas anymore. 851 00:36:43,920 --> 00:36:45,120 Ailgynnal cof. 852 00:36:45,120 --> 00:36:45,840 Dyna ni. 853 00:36:45,840 --> 00:36:46,410 Mae pob hawl. 854 00:36:46,410 --> 00:36:52,500 Felly, mae'n debyg eich mynegai 100,000 ints y tu hwnt i ble y dylech fod wedi bod yn 855 00:36:52,500 --> 00:36:54,410 cof, pethau drwg yn digwydd. 856 00:36:54,410 --> 00:36:56,430 Felly, nid yw hyn yn amlwg yn, rheol cyflym caled. 857 00:36:56,430 --> 00:36:58,190 Roeddwn yn fath o ddefnyddio treial a chamgymeriadau i gyrraedd yno. 858 00:36:58,190 --> 00:37:02,230 Ond mae hyn yn oherwydd, stori hir yn fyr, cof eich cyfrifiadur hefyd yn cael ei rhannu 859 00:37:02,230 --> 00:37:03,580 i mewn i bethau hyn a elwir yn segmentau. 860 00:37:03,580 --> 00:37:07,260 Ac weithiau, y cyfrifiadur mewn gwirionedd wedi rhoi ychydig yn fwy cof i chi 861 00:37:07,260 --> 00:37:08,400 nag yr ydych yn gofyn amdano. 862 00:37:08,400 --> 00:37:12,170 Ond ar gyfer effeithlonrwydd, mae'n haws i cael mwy o cof, ond dim ond dweud wrthych 863 00:37:12,170 --> 00:37:13,780 eich bod yn cael cyfran ohono. 864 00:37:13,780 --> 00:37:16,370 >> Ac os ydych yn cael lwcus weithiau, Felly, efallai y byddwch yn gallu cyffwrdd 865 00:37:16,370 --> 00:37:17,795 Nid yw cof yw'n perthyn i chi. 866 00:37:17,795 --> 00:37:21,860 Nid oes gennych unrhyw sicrwydd bod yr hyn a gwerth byddwch yn rhoi y bydd yn aros yno, oherwydd 867 00:37:21,860 --> 00:37:25,080 y cyfrifiadur yn dal i feddwl nad yw'n eiddo i chi, ond nid yw'n anghenraid yn mynd 868 00:37:25,080 --> 00:37:29,910 i daro segment arall o gof yn y cyfrifiadur a chymell camgymeriad tebyg 869 00:37:29,910 --> 00:37:31,710 yr un yma yma. 870 00:37:31,710 --> 00:37:32,060 Mae pob hawl. 871 00:37:32,060 --> 00:37:37,240 Unrhyw gwestiynau, yna ar y cof? 872 00:37:37,240 --> 00:37:37,590 >> Mae pob hawl. 873 00:37:37,590 --> 00:37:40,610 Gadewch i ni edrych yma, yna, yn rhywbeth yr ydym wedi bod yn cymryd i 874 00:37:40,610 --> 00:37:48,361 a roddwyd ers peth amser, sydd sydd yn y ffeil o'r enw cs50.h. 875 00:37:48,361 --> 00:37:49,420 Felly, mae hyn yn ffeil. 876 00:37:49,420 --> 00:37:51,130 Dyma criw cyfan o sylwadau atodol. 877 00:37:51,130 --> 00:37:53,900 Ac efallai y byddwch wedi edrych ar hyn os chi poked o gwmpas ar yr offer. 878 00:37:53,900 --> 00:37:57,000 Ond mae'n troi allan bod yr holl amser, pan fyddwn yn ei ddefnyddio i ddefnyddio llinyn fel 879 00:37:57,000 --> 00:38:01,130 cyfystyr, y modd yr ydym yn datgan sy'n gyfystyr Gyda hyn 880 00:38:01,130 --> 00:38:03,990 keyword typedef, am ddiffiniad fath. 881 00:38:03,990 --> 00:38:07,500 Ac rydym yn ei hanfod yn dweud, yn gwneud llinyn yn gyfystyr ar gyfer seren torgoch. 882 00:38:07,500 --> 00:38:11,190 Bod y ffordd y mae pentwr creu olwynion hyfforddi hyn a elwir yn 883 00:38:11,190 --> 00:38:12,040 y llinyn. 884 00:38:12,040 --> 00:38:14,830 >> Nawr dyma dim ond prototeip ar gyfer getchar. 885 00:38:14,830 --> 00:38:17,350 Efallai y byddwn wedi ei weld o'r blaen, ond mae hynny'n yn wir yr hyn y mae'n ei wneud. getchar 886 00:38:17,350 --> 00:38:19,070 yn cymryd unrhyw ddadleuon, yn dychwelyd torgoch. 887 00:38:19,070 --> 00:38:21,340 getdouble yn cymryd unrhyw ddadleuon, dychwelyd dwbl. 888 00:38:21,340 --> 00:38:24,440 getfloat yn cymryd unrhyw ddadleuon, ffurflenni fflôt, ac yn y blaen. 889 00:38:24,440 --> 00:38:27,270 getint yn yma. getlonglong yn yma. 890 00:38:27,270 --> 00:38:28,820 Ac getstring yn yma. 891 00:38:28,820 --> 00:38:29,420 A dyna ni. 892 00:38:29,420 --> 00:38:33,080 Mae'r llinell borffor yn Preprocessor arall gyfarwyddeb oherwydd y 893 00:38:33,080 --> 00:38:35,550 hashtag ar ddechrau ohono. 894 00:38:35,550 --> 00:38:35,870 >> Mae pob hawl. 895 00:38:35,870 --> 00:38:38,380 Felly nawr gadewch i mi fynd i mewn i cs50.c. 896 00:38:38,380 --> 00:38:40,400 Ac ni fyddwn yn siarad yn rhy hir ar hyn. 897 00:38:40,400 --> 00:38:43,280 Ond i roi cipolwg o'r hyn sydd ar eich bod yn mynd ar hyn i gyd 898 00:38:43,280 --> 00:38:46,434 amser, gadewch i mi fynd i - 899 00:38:46,434 --> 00:38:48,250 gadewch i ni wneud getchar. 900 00:38:48,250 --> 00:38:51,050 Felly getchar yn bennaf sylwadau. 901 00:38:51,050 --> 00:38:52,060 Ond mae'n edrych fel hyn. 902 00:38:52,060 --> 00:38:54,800 Felly, mae hyn yw swyddogaeth wirioneddol getchar ein bod wedi 903 00:38:54,800 --> 00:38:56,055 cymryd yn ganiataol yn bodoli. 904 00:38:56,055 --> 00:38:59,370 A hyd yn oed er nad ydym wedi defnyddio'r un yn aml, os o gwbl, 'i' o leiaf 905 00:38:59,370 --> 00:39:00,470 gymharol syml. 906 00:39:00,470 --> 00:39:02,580 Felly mae'n werth cymryd edrych yn sydyn ar yma. 907 00:39:02,580 --> 00:39:06,540 >> Felly getchar Mae dolen ddiddiwedd, yn fwriadol felly mae'n debyg. 908 00:39:06,540 --> 00:39:10,050 Mae wedyn yn galw - ac mae hyn yn fath o ailddefnyddio 'n glws o god ydym ni ein hunain yn ysgrifennu. 909 00:39:10,050 --> 00:39:11,220 Mae'n galw getstring. 910 00:39:11,220 --> 00:39:12,460 Oherwydd yr hyn y mae'n ei yn ei olygu i gael golosg? 911 00:39:12,460 --> 00:39:14,730 Wel, efallai y byddwch yn ogystal ceisio cael llinell cyfan o destun gan y defnyddiwr a 912 00:39:14,730 --> 00:39:16,940 Yna, dim ond yn edrych ar un o gymeriadau hynny. 913 00:39:16,940 --> 00:39:19,170 Yn unol 60, dyma ychydig ychydig o wiriad sanity. 914 00:39:19,170 --> 00:39:21,610 Os getstring dychwelyd null, gadewch i ni symud ymlaen. 915 00:39:21,610 --> 00:39:22,820 Aeth rhywbeth o'i le. 916 00:39:22,820 --> 00:39:28,120 >> Nawr mae hyn braidd yn ddiflas, ond confensiynol yn C. cols max yn ôl pob tebyg 917 00:39:28,120 --> 00:39:29,960 cynrychioli'r hyn dim ond yn seiliedig ar ei enw? 918 00:39:29,960 --> 00:39:31,670 Mae'n gyson. 919 00:39:31,670 --> 00:39:36,040 Mae fel y gwerth rhifol y fwyaf torgoch gall ydych yn ei gynrychioli gyda 920 00:39:36,040 --> 00:39:40,370 un brathiad, ac mae'n debyg y nifer 255, sef y nifer mwyaf yr ydych 921 00:39:40,370 --> 00:39:42,720 cynrychioli wyth darnau, gan ddechrau o sero. 922 00:39:42,720 --> 00:39:47,460 Felly, yr wyf i wedi defnyddio hyn, yn y swyddogaeth hon, pan ysgrifennu'r cod hwn, dim ond am fod 923 00:39:47,460 --> 00:39:51,753 os oes rhywbeth yn mynd o'i le yn getchar ond ei bwrpas mewn bywyd yw i ddychwelyd 924 00:39:51,753 --> 00:39:54,830 torgoch, mae angen i chi rywsut yn gallu i ddangos i'r defnyddiwr y 925 00:39:54,830 --> 00:39:55,840 aeth rhywbeth o'i le. 926 00:39:55,840 --> 00:39:56,970 Ni allwn ddychwelyd null. 927 00:39:56,970 --> 00:39:58,480 Mae'n ymddangos bod null yn pwyntydd. 928 00:39:58,480 --> 00:40:01,030 Ac eto, getchar wedi i ddychwelyd torgoch. 929 00:40:01,030 --> 00:40:04,760 >> Felly y confensiwn, os bydd rhywbeth yn mynd anghywir, yw chi, y rhaglennydd, neu mewn 930 00:40:04,760 --> 00:40:08,160 yr achos hwn, i mi y llyfrgell, yr wyf wedi gyfiawn penderfynu fympwyol, os 931 00:40:08,160 --> 00:40:12,230 rhywbeth yn mynd o'i le, yr wyf i'n mynd i dychwelyd y rhif 255, sy'n wirioneddol 932 00:40:12,230 --> 00:40:17,240 yn golygu na allwn, y defnyddiwr ni all deipio cymeriad gynrychiolir gan y 933 00:40:17,240 --> 00:40:21,410 rhif 255 oherwydd ein bod wedi cael ei ddwyn fel gwerth sentinel hyn a elwir i 934 00:40:21,410 --> 00:40:23,410 yn cynrychioli problem. 935 00:40:23,410 --> 00:40:27,010 Nawr, mae'n ymddangos bod y cymeriad 255 nid yw'n rhywbeth y gallwch ei deipio ar 936 00:40:27,010 --> 00:40:28,380 eich bysellfwrdd, felly does dim llawer mawr. 937 00:40:28,380 --> 00:40:30,910 Nad yw'r defnyddiwr yn sylwi bod Rydw i wedi dwyn y cymeriad hwn. 938 00:40:30,910 --> 00:40:34,620 Ond os ydych chi erioed wedi gweld ar dudalennau ddyn ar system gyfrifiadurol rhai cyfeiriadau at 939 00:40:34,620 --> 00:40:38,560 yr holl gapiau cyson fel hyn sy'n dweud, mewn achosion o gamgymeriadau hwn nerth cyson 940 00:40:38,560 --> 00:40:42,720 yn cael ei ddychwelyd, dyna i gyd peth ddynol wnaeth blynedd yn ôl penderfynwyd fympwyol i 941 00:40:42,720 --> 00:40:45,680 dychwelyd y gwerth ac arbennig alw ei fod yn gyson yn achos 942 00:40:45,680 --> 00:40:46,840 rhywbeth yn mynd o'i le. 943 00:40:46,840 --> 00:40:48,580 >> Nawr bod y hud yn digwydd i lawr yma. 944 00:40:48,580 --> 00:40:52,600 Yn gyntaf, rwy'n datgan yn unol 67 ddau gymeriad, C1 a C2. 945 00:40:52,600 --> 00:40:57,080 Ac yna yn llinell 68, mae mewn gwirionedd llinell o god sy'n atgoffa rhywun o 946 00:40:57,080 --> 00:41:01,140 ein ffrind printf, gan ei fod yn oes gan y cant Cs mewn dyfynodau. 947 00:41:01,140 --> 00:41:06,490 Ond sylwi ar yr hyn sy'n digwydd yma. sscanf golygu sgan linyn - 948 00:41:06,490 --> 00:41:11,690 golygu sganio fformatio llinyn, sscanf ergo. 949 00:41:11,690 --> 00:41:12,590 Beth mae hynny'n ei olygu? 950 00:41:12,590 --> 00:41:16,310 Mae'n golygu eich bod yn pasio i sscanf llinyn. 951 00:41:16,310 --> 00:41:18,420 A llinell yw beth bynnag y mathau ddefnyddiwr i mewn 952 00:41:18,420 --> 00:41:23,520 Byddwch yn mynd heibio i sscanf llinyn fformat tebyg hon sy'n dweud scanf beth yw 953 00:41:23,520 --> 00:41:25,870 ydych yn gobeithio y bydd y defnyddiwr wedi teipio i mewn 954 00:41:25,870 --> 00:41:29,730 Yna byddwch yn pasio i mewn y chyfeiriad dau darnau o gof, yn yr achos hwn, 955 00:41:29,730 --> 00:41:31,150 oherwydd bod gen i ddau bachau. 956 00:41:31,150 --> 00:41:34,610 Felly, yr wyf i'n mynd i roi y cyfeiriad o C1 a chyfeiriad C2. 957 00:41:34,610 --> 00:41:37,700 >> A dwyn i gof eich bod yn rhoi swyddogaeth y gyfeiriad rhai amrywiol, beth 958 00:41:37,700 --> 00:41:38,950 yr awgrym? 959 00:41:38,950 --> 00:41:41,400 960 00:41:41,400 --> 00:41:45,050 Beth all y swyddogaeth wneud o ganlyniad o roi ei gyfeiriad a 961 00:41:45,050 --> 00:41:48,170 amrywiol, yn hytrach na y newidyn ei hun? 962 00:41:48,170 --> 00:41:49,450 Gall newid, dde? 963 00:41:49,450 --> 00:41:53,250 Os ydych wedi cael rhywun map i nam corfforol gyfeiriad, gallant fynd yno ac yn gwneud 964 00:41:53,250 --> 00:41:54,750 beth bynnag y maent am ei gael ar y cyfeiriad hwnnw. 965 00:41:54,750 --> 00:41:55,800 Un syniad yma. 966 00:41:55,800 --> 00:41:59,950 Os byddwn yn trosglwyddo i sscanf, cyfeiriad ddau darnau o gof, hyd yn oed y rhain bach 967 00:41:59,950 --> 00:42:03,585 darnau bach o gof, C1 ac C2, ond yn dweud wrthynt y cyfeiriad ohonynt, 968 00:42:03,585 --> 00:42:05,170 Gall sscanf ei newid. 969 00:42:05,170 --> 00:42:08,530 >> Felly, pwrpas sscanf mewn bywyd, os ydym yn darllen y dudalen dyn, yw darllen yr hyn y mae'r 970 00:42:08,530 --> 00:42:13,420 defnyddiwr deipio i mewn, gobeithio am y defnyddiwr yn gorfod teipio mewn cymeriad ac efallai 971 00:42:13,420 --> 00:42:16,470 cymeriad arall, a beth bynnag y defnyddiwr teipio, cymeriad cyntaf yn mynd 972 00:42:16,470 --> 00:42:19,310 yma, yr ail gymeriad yn mynd yma. 973 00:42:19,310 --> 00:42:22,470 Yn awr, wrth fynd heibio, mae hyn, ac y byddech Dim ond yn gwybod hyn gan y dogfennau, 974 00:42:22,470 --> 00:42:25,570 y ffaith fy mod yn rhoi gofod gwag yno yn unig yn golygu nad wyf yn poeni os 975 00:42:25,570 --> 00:42:28,440 y defnyddiwr yn taro'r bar gofod ychydig gwaith cyn ef neu hi yn cymryd 976 00:42:28,440 --> 00:42:30,400 cymeriad, dw i'n mynd i anwybyddu unrhyw ofod gwyn. 977 00:42:30,400 --> 00:42:32,510 Felly hynny, yr wyf yn gwybod o y ddogfennaeth. 978 00:42:32,510 --> 00:42:36,570 >> Mae'r ffaith fod yna ail% c yna ofod gwyn mewn gwirionedd 979 00:42:36,570 --> 00:42:37,410 bwriadol. 980 00:42:37,410 --> 00:42:41,190 Yr wyf am fod yn gallu canfod os yw'r defnyddiwr sgriwio i fyny neu ddim yn cydweithredu. 981 00:42:41,190 --> 00:42:45,630 Felly, rwy'n gobeithio bod y defnyddiwr yn unig deipio mewn un cymeriad, felly rwy'n gobeithio 982 00:42:45,630 --> 00:42:50,640 y sscanf dim ond yn mynd i ddychwelyd y werth 1 oherwydd, unwaith eto, os wyf yn darllen 983 00:42:50,640 --> 00:42:55,400 y dogfennau, pwrpas sscanf yn bywyd yn dychwelyd at y nifer o 984 00:42:55,400 --> 00:42:59,170 newidynnau a gafodd eu llenwi gyda mewnbwn defnyddwyr. 985 00:42:59,170 --> 00:43:02,270 >> I basio mewn dau newidyn cyfeiriadau, C1 a C2. 986 00:43:02,270 --> 00:43:06,420 Rwy'n gobeithio, fodd bynnag, mai dim ond un o cael eu lladd oherwydd os sscanf 987 00:43:06,420 --> 00:43:11,130 dychwelyd 2, beth sydd yn ôl pob tebyg y goblygiadau rhesymegol? 988 00:43:11,130 --> 00:43:14,600 Nad oedd y defnyddiwr yn unig oedd yn rhoi un i mi gymeriad fel yr wyf yn dweud wrtho neu hi. 989 00:43:14,600 --> 00:43:17,860 Mae'n debyg eu bod deipio yn leiaf ddau gymeriad. 990 00:43:17,860 --> 00:43:22,430 Felly os wyf yn nid yn eu lle oedd yr ail % C, Fi jyst wedi cael un, a 991 00:43:22,430 --> 00:43:25,370 Byddai dweud y gwir yn fwy 'n athrylithgar dull, Cipolwg cyntaf i mi feddwl, 992 00:43:25,370 --> 00:43:30,220 nad ydych yn mynd i fod yn gallu canfod os yw'r defnyddiwr wedi bod yn rhoi mwy i chi 993 00:43:30,220 --> 00:43:31,780 mewnbwn na chi mewn gwirionedd eisiau. 994 00:43:31,780 --> 00:43:34,100 Felly, mae hyn yn ffurflen ymhlyg o gwirio camgymeriadau. 995 00:43:34,100 --> 00:43:35,640 >> Ond sylwi ar yr hyn yr wyf yn ei wneud yma. 996 00:43:35,640 --> 00:43:39,970 Unwaith rwy'n siŵr bod y defnyddiwr yn rhoi un i mi cymeriad, yr wyf yn rhad ac am ddim y llinell, yn gwneud 997 00:43:39,970 --> 00:43:44,450 y gwrthwyneb i getstring, sydd yn ei dro defnyddio malloc, ac yna byddaf yn dychwelyd 998 00:43:44,450 --> 00:43:51,030 C1, cymeriad fy mod yn gobeithio y defnyddiwr a ddarperir a dim ond darparu. 999 00:43:51,030 --> 00:43:54,680 Felly cipolwg cyflym yn unig, ond unrhyw gwestiynau ar getchar? 1000 00:43:54,680 --> 00:43:57,450 1001 00:43:57,450 --> 00:43:59,590 Byddwn yn dod yn ôl at rai o'r lleill. 1002 00:43:59,590 --> 00:44:03,770 >> Wel, gadewch i mi fynd yn ei flaen ac yn gwneud hyn - debyg nawr, dim ond er mwyn ysgogi ein 1003 00:44:03,770 --> 00:44:08,910 trafodaeth mewn wythnos ac amser, mae hyn yn yn ffeil o'r enw structs.h. 1004 00:44:08,910 --> 00:44:11,440 Ac eto, mae hyn yn unig yw blas o rywbeth sydd o'n blaenau. 1005 00:44:11,440 --> 00:44:13,090 Ond rhybudd bod llawer o hyn yw sylwadau. 1006 00:44:13,090 --> 00:44:17,440 Felly, gadewch i mi dynnu sylw at dim ond y rhan diddorol am y tro. 1007 00:44:17,440 --> 00:44:18,020 typedef - 1008 00:44:18,020 --> 00:44:19,700 mae yr un gair allweddol eto. 1009 00:44:19,700 --> 00:44:23,100 typedef a ddefnyddiwn i ddatgan llinyn fel math data arbennig. 1010 00:44:23,100 --> 00:44:27,490 Gallwch ddefnyddio typedef i greu newydd sbon mathau o ddata nad oedd yn bodoli pan 1011 00:44:27,490 --> 00:44:28,570 Roedd C dyfeisio. 1012 00:44:28,570 --> 00:44:32,520 Er enghraifft, int yn dod gyda C. torgoch yn dod gyda C. dwbl yn dod gyda C. Ond 1013 00:44:32,520 --> 00:44:34,000 does dim syniad o fyfyriwr. 1014 00:44:34,000 --> 00:44:37,230 Ac eto byddai'n eithaf ddefnyddiol i fod yn gallu ysgrifennu rhaglen sy'n storio 1015 00:44:37,230 --> 00:44:40,440 mewn newidyn, rhif adnabod myfyriwr, eu henw, ac yn eu tŷ. 1016 00:44:40,440 --> 00:44:42,890 Mewn geiriau eraill, tri darn o ddata, hoffi int a 1017 00:44:42,890 --> 00:44:44,420 llinyn a llinyn arall. 1018 00:44:44,420 --> 00:44:48,220 >> Gyda typedef, beth 'n bert pwerus am hyn a'r sturct gair allweddol ar gyfer 1019 00:44:48,220 --> 00:44:53,660 strwythur, chi, y rhaglennydd yn 2013, Gall mewn gwirionedd yn diffinio eich hun 1020 00:44:53,660 --> 00:44:57,530 mathau o ddata nad oedd yn bodoli flynyddoedd yn ôl ond yn addas ar gyfer eich dibenion. 1021 00:44:57,530 --> 00:45:01,910 Ac felly dyma, yn y llinellau 13 drwy 19, rydym yn datgan math data newydd, fel 1022 00:45:01,910 --> 00:45:04,320 yn int, ond yn galw ei myfyrwyr. 1023 00:45:04,320 --> 00:45:09,310 A'r tu mewn newidyn hwn yn mynd i fod tri pheth - yn int, llinyn, 1024 00:45:09,310 --> 00:45:09,930 a llinyn. 1025 00:45:09,930 --> 00:45:13,040 Felly, gallwch chi feddwl am yr hyn sy'n wir ddigwyddodd yma, er bod hyn yn 1026 00:45:13,040 --> 00:45:17,160 dipyn o symleiddio ar gyfer heddiw, myfyriwr yn mynd yn ei hanfod 1027 00:45:17,160 --> 00:45:19,450 i edrych fel hyn. 1028 00:45:19,450 --> 00:45:22,580 Mae ei mynd i fod yn ddarn o cof gyda adnabod, enw 1029 00:45:22,580 --> 00:45:25,580 maes, a chae tŷ. 1030 00:45:25,580 --> 00:45:30,670 A byddwn yn gallu defnyddio darnau hynny o cof a mynediad iddynt fel a ganlyn. 1031 00:45:30,670 --> 00:45:38,870 >> Os byddaf yn mynd i mewn i struct0.c, dyma gymharol hir, ond yn dilyn 1032 00:45:38,870 --> 00:45:42,630 patrwm, y cod sy'n yn defnyddio'r tric newydd. 1033 00:45:42,630 --> 00:45:45,790 Felly, yn gyntaf, gadewch i mi dynnu eich sylw i rannau diddorol i fyny top. 1034 00:45:45,790 --> 00:45:49,670 Sharp yn diffinio myfyrwyr 3, yn datgan myfyrwyr ac aseiniaid a elwir yn gyson 1035 00:45:49,670 --> 00:45:53,450 yn fympwyol y rhif 3, dim ond felly mae gen i dri myfyriwr sy'n defnyddio 1036 00:45:53,450 --> 00:45:54,830 rhaglen hon am y tro. 1037 00:45:54,830 --> 00:45:55,960 Yma, yn dod Main. 1038 00:45:55,960 --> 00:45:58,860 Ac rhybudd, sut ydw i'n datgan amrywiaeth o fyfyrwyr? 1039 00:45:58,860 --> 00:46:00,480 Wel, Fi jyst yn defnyddio'r un gystrawen. 1040 00:46:00,480 --> 00:46:02,110 Mae'r myfyriwr gair yn amlwg yn newydd. 1041 00:46:02,110 --> 00:46:04,790 Ond myfyriwr, dosbarth, myfyrwyr braced. 1042 00:46:04,790 --> 00:46:06,720 >> Felly, yn anffodus mae llawer o ailddefnyddio o dermau yma. 1043 00:46:06,720 --> 00:46:07,660 Nifer hyn yn unig. 1044 00:46:07,660 --> 00:46:09,040 Felly, mae hyn yn debyg i ddweud tri. 1045 00:46:09,040 --> 00:46:11,430 Dosbarth yn union beth rwyf am i alw y newidyn. 1046 00:46:11,430 --> 00:46:12,840 Y gallwn ei alw'n fyfyrwyr. 1047 00:46:12,840 --> 00:46:15,880 Ond dosbarth, nid yw hyn yn ddosbarth mewn gwrthrych oriented Java fath tramwy. 1048 00:46:15,880 --> 00:46:17,220 'I' jyst dosbarth o fyfyrwyr. 1049 00:46:17,220 --> 00:46:20,590 A'r math o ddata pob elfen yn yr amrywiaeth yn fyfyriwr. 1050 00:46:20,590 --> 00:46:23,040 Felly, mae hyn yn ychydig yn wahanol ac o ddweud rhywbeth 1051 00:46:23,040 --> 00:46:25,250 fel hyn, dim ond - 1052 00:46:25,250 --> 00:46:29,500 I ddim yn dweud yn rhoi tri myfyriwr i mi a galw yn y dosbarth hwnnw arae. 1053 00:46:29,500 --> 00:46:29,800 >> Mae pob hawl. 1054 00:46:29,800 --> 00:46:30,680 Nawr dyma pedair dolen. 1055 00:46:30,680 --> 00:46:33,480 Cyfarwydd y boi - ailadrodd o sero ar hyd at dri. 1056 00:46:33,480 --> 00:46:35,160 A dyma y darn newydd o gystrawen. 1057 00:46:35,160 --> 00:46:37,710 Mae'r rhaglen yn mynd i mi annog, y dynol, i roi cynnig myfyriwr 1058 00:46:37,710 --> 00:46:39,200 ID, sy'n int. 1059 00:46:39,200 --> 00:46:44,650 A dyma y gystrawen y gallwch ag ef storio rhywbeth yn y maes adnabod ar 1060 00:46:44,650 --> 00:46:48,630 lleoliad dosbarth braced I. Felly, Nid chystrawen hyn yn newydd. 1061 00:46:48,630 --> 00:46:51,450 Mae hyn yn unig yn golygu rhoi'r wythfed i mi myfyrwyr yn y dosbarth. 1062 00:46:51,450 --> 00:46:52,940 Ond mae symbol hwn yn newydd. 1063 00:46:52,940 --> 00:46:56,320 Hyd yn hyn, ni allwn wedi defnyddio dot, o leiaf mewn cod fel hyn. 1064 00:46:56,320 --> 00:47:01,490 Mae hyn yn golygu mynd i'r strwythur a elwir yn myfyriwr a rhoi rhywbeth yno. 1065 00:47:01,490 --> 00:47:05,670 Yn yr un modd, yn y llinell nesaf, 31, ewch ymlaen a rhowch beth bynnag fath y defnyddiwr 1066 00:47:05,670 --> 00:47:10,530 am enw yma a beth maent yn ei wneud ar gyfer tŷ, yr un peth, mynd yn ei flaen a 1067 00:47:10,530 --> 00:47:13,230 ei roi i mewn. tŷ. 1068 00:47:13,230 --> 00:47:15,955 >> Felly, beth mae hyn yn rhaglen ei wneud yn y pen draw? 1069 00:47:15,955 --> 00:47:17,220 Gallwch weld ychydig o teaser yno. 1070 00:47:17,220 --> 00:47:24,780 Gadewch i mi fynd yn ei flaen ac yn gwneud structs 0 dot slaes strwythur 0, ID myfyriwr 1, 1071 00:47:24,780 --> 00:47:28,250 dweud David Mather, myfyrwyr ID 2. 1072 00:47:28,250 --> 00:47:32,070 Rob Kirkland, myfyrwyr ID 3. 1073 00:47:32,070 --> 00:47:35,010 Lauren Leverit - 1074 00:47:35,010 --> 00:47:38,380 a'r unig beth y rhaglen hon yn gwneud hynny, sydd ychydig yn gwbl fympwyol, yn cael ei 1075 00:47:38,380 --> 00:47:40,980 Roeddwn i eisiau gwneud rhywbeth gyda data hwn, nawr fy mod i wedi dysgu i ni sut i 1076 00:47:40,980 --> 00:47:43,450 defnyddio structs, yw wyf newydd gael y ddolen ychwanegol yma. 1077 00:47:43,450 --> 00:47:45,260 I ailadrodd dros yr amrywiaeth o fyfyrwyr. 1078 00:47:45,260 --> 00:47:49,170 Roeddwn i'n arfer ein, ffrind efallai bellach yn gyfarwydd, llinyn cymharu, stircomp i 1079 00:47:49,170 --> 00:47:53,780 siec yn dŷ 8fed myfyriwr gyfartal i Mather? 1080 00:47:53,780 --> 00:47:56,760 Ac os felly, dim ond argraffu rhywbeth fympwyol fel, ie, y mae. 1081 00:47:56,760 --> 00:47:59,430 Ond unwaith eto, nid yw rhoi cyfleoedd i mi i ddefnyddio ac ailddefnyddio ac 1082 00:47:59,430 --> 00:48:02,270 ailddefnyddio y nodiant dot newydd. 1083 00:48:02,270 --> 00:48:03,250 >> Felly, sy'n gofalu, dde? 1084 00:48:03,250 --> 00:48:06,270 Dod o hyd i raglen myfyriwr yn braidd yn fympwyol, ond mae'n troi allan 1085 00:48:06,270 --> 00:48:09,800 y gallwn wneud pethau defnyddiol gyda hwn, er enghraifft, fel a ganlyn. 1086 00:48:09,800 --> 00:48:14,600 Mae hwn yn strwythur llawer mwy cymhleth yn C. Mae'n cael dwsin neu fwy o feysydd, 1087 00:48:14,600 --> 00:48:15,880 braidd yn gryptig enwir. 1088 00:48:15,880 --> 00:48:20,110 Ond os ydych chi wedi clywed erioed o graffeg fformat ffeil o'r enw didfap, BMP, mae'n 1089 00:48:20,110 --> 00:48:22,830 ymddangos bod y fformat ffeil bitmap 'n bert lawer yn edrych fel' na hyn. 1090 00:48:22,830 --> 00:48:24,200 Mae'n dwp wyneb Smiley bach. 1091 00:48:24,200 --> 00:48:27,840 Mae'n ddelwedd bach fy mod i wedi chwyddo i mewn ar eithaf mawr fel y gallwn i weld pob 1092 00:48:27,840 --> 00:48:30,410 y dotiau neu picsel unigol. 1093 00:48:30,410 --> 00:48:33,800 Yn awr, mae'n troi allan y gall ydym yn eu cynrychioli a dot du â, dyweder, y nifer 0. 1094 00:48:33,800 --> 00:48:35,520 A dot gwyn gyda rhif 1. 1095 00:48:35,520 --> 00:48:39,140 >> Felly, mewn geiriau eraill, os ydych am i dynnu Wyneb sy'n gwenu ac arbed y ddelwedd mewn 1096 00:48:39,140 --> 00:48:42,680 cyfrifiadur, digon yw storio zeros a rhai sy'n edrych fel hyn, ble, 1097 00:48:42,680 --> 00:48:45,250 unwaith eto, rhai yn wyn a seroau yn ddu. 1098 00:48:45,250 --> 00:48:48,290 A chyda'i gilydd, os oes gennych effeithiol mae grid o rai a seroau, mae gennych 1099 00:48:48,290 --> 00:48:51,030 grid o picsel, ac os ydych yn gosod nhw allan, mae gennych 'n giwt 1100 00:48:51,030 --> 00:48:52,560 ychydig o wyneb Smiley. 1101 00:48:52,560 --> 00:48:58,150 Yn awr, fformat ffeil didfap, BMP, yn effeithiol bod o dan y cwfl, 1102 00:48:58,150 --> 00:49:00,970 ond gyda mwy o picsel sot eich bod mewn gwirionedd gall gynrychioli lliwiau. 1103 00:49:00,970 --> 00:49:05,170 >> Ond pan fydd gennych fwy soffistigedig fformatau ffeil fel BMP a JPEG a GIF 1104 00:49:05,170 --> 00:49:09,360 efallai y byddwch yn gyfarwydd â nhw, y rhai ffeiliau ar ddisg fel arfer nid yn unig yn 1105 00:49:09,360 --> 00:49:13,760 â sero a rhai ar gyfer y picsel, ond ganddynt rywfaint o metadata hefyd - 1106 00:49:13,760 --> 00:49:16,960 meta yn yr ystyr nad yw'n wir data ond mae'n ddefnyddiol cael. 1107 00:49:16,960 --> 00:49:21,370 Felly y caeau yma yn awgrymu, a byddwn yn gweld hyn yn fwy manwl yn P-set 1108 00:49:21,370 --> 00:49:25,810 5, bod cyn y zeros a rhai sy'n cynrychioli'r picsel mewn delwedd, 1109 00:49:25,810 --> 00:49:29,110 mae 'na griw o metadata fel maint y ddelwedd a'r 1110 00:49:29,110 --> 00:49:30,250 lled y ddelwedd. 1111 00:49:30,250 --> 00:49:32,910 Ac yn sylwi Rwy'n plicio oddi ar rhai bethau mympwyol yma - 1112 00:49:32,910 --> 00:49:34,260 lled ac uchder. 1113 00:49:34,260 --> 00:49:36,160 Bit cyfrif a rhai pethau eraill. 1114 00:49:36,160 --> 00:49:37,840 Felly, mae rhywfaint o fetadata mewn ffeil. 1115 00:49:37,840 --> 00:49:41,470 >> Ond drwy ddeall sut y ffeiliau yn cael eu gosod allan yn y ffordd hon, gallwch mewn gwirionedd 1116 00:49:41,470 --> 00:49:45,890 Yna, trin delweddau, adennill delweddau o ddisg, newid maint delweddau. 1117 00:49:45,890 --> 00:49:47,560 Ond ni allwch o reidrwydd gallant eu gwella. 1118 00:49:47,560 --> 00:49:48,480 Angen i mi gael llun. 1119 00:49:48,480 --> 00:49:52,840 Felly, yr wyf yn mynd yn ôl i RJ yma, a welsoch chi ar y sgrin yn eithaf beth amser yn ôl. 1120 00:49:52,840 --> 00:49:57,160 Ac os byddaf yn agor Prif yma, mae hyn yn beth sy'n digwydd os ydych yn ceisio chwyddo i mewn ac 1121 00:49:57,160 --> 00:49:59,380 gwella RJ. 1122 00:49:59,380 --> 00:50:01,480 Dyw e ddim yn cael unrhyw well mewn gwirionedd. 1123 00:50:01,480 --> 00:50:06,240 Nawr Keynote yn fath o pylu ei fod yn ychydig bach, dim ond i sglein dros y 1124 00:50:06,240 --> 00:50:11,040 ffaith nad RJ yn mynd yn arbennig o gwell pan fyddwch yn chwyddo i mewn 1125 00:50:11,040 --> 00:50:13,310 Ac os yn ei wneud y modd hwn, gweld y sgwariau? 1126 00:50:13,310 --> 00:50:15,490 Yeah, gallwch bendant yn gweld y sgwariau ar daflunydd. 1127 00:50:15,490 --> 00:50:17,690 >> Dyna beth gewch pan fyddwch yn gwella. 1128 00:50:17,690 --> 00:50:22,570 Ond i ddeall sut mae ein RJ neu'r Wyneb sy'n gwenu yn cael ei weithredu fydd yn gadael i ni 1129 00:50:22,570 --> 00:50:24,950 mewn gwirionedd yn ysgrifennu cod sy'n trin pethau hyn. 1130 00:50:24,950 --> 00:50:29,970 Ac yr wyf yn meddwl y byddwn i'n dod i ben ar y nodyn hwn, gyda 55 eiliad o wella hynny yw, 1131 00:50:29,970 --> 00:50:31,230 Yr wyf yn meiddio, yn dweud braidd yn gamarweiniol. 1132 00:50:31,230 --> 00:50:32,990 >> [VIDEO Playback] 1133 00:50:32,990 --> 00:50:34,790 >> -Mae'n gorwedd. 1134 00:50:34,790 --> 00:50:38,310 Am yr hyn, nid wyf yn gwybod. 1135 00:50:38,310 --> 00:50:41,200 >> -Felly, beth ydym yn gwybod? 1136 00:50:41,200 --> 00:50:45,280 >> -Bod am 9:15 Ray Santoya oedd ar y ATM. 1137 00:50:45,280 --> 00:50:47,830 >> -Felly, y cwestiwn yw beth oedd e'n ei wneud ar 09:16? 1138 00:50:47,830 --> 00:50:50,750 >> -Saethu y naw milimetr ar rywbeth. 1139 00:50:50,750 --> 00:50:52,615 Efallai ei fod yn gweld y sniper. 1140 00:50:52,615 --> 00:50:54,760 >> -Neu oedd yn gweithio gydag ef. 1141 00:50:54,760 --> 00:50:56,120 >> -Aros. 1142 00:50:56,120 --> 00:50:57,450 Ewch yn ôl un. 1143 00:50:57,450 --> 00:50:58,700 >> -Beth ydych chi'n ei weld? 1144 00:50:58,700 --> 00:51:05,530 1145 00:51:05,530 --> 00:51:09,490 >> -Dewch ei wyneb i fyny, sgrin lawn. 1146 00:51:09,490 --> 00:51:09,790 >> -Mae ei sbectol. 1147 00:51:09,790 --> 00:51:11,040 >> -Mae adlewyrchiad. 1148 00:51:11,040 --> 00:51:21,790 1149 00:51:21,790 --> 00:51:23,520 >> -Dyna'r tîm pêl fas Neuvitas. 1150 00:51:23,520 --> 00:51:24,530 Dyna eu logo. 1151 00:51:24,530 --> 00:51:27,040 >> -Ac efe yn siarad i bwy bynnag sy'n gwisgo y siaced. 1152 00:51:27,040 --> 00:51:27,530 >> [VIDEO END Playback] 1153 00:51:27,530 --> 00:51:29,180 >> DAVID J. Malan: Bydd hyn yn fod Set Problem 5. 1154 00:51:29,180 --> 00:51:30,720 Byddwn yn gweld chi yr wythnos nesaf. 1155 00:51:30,720 --> 00:51:32,330 >> SIARADWR GWRYW: Yn y CS50 nesaf. 1156 00:51:32,330 --> 00:51:39,240 >> [Chriciaid drydar] 1157 00:51:39,240 --> 00:51:41,270 >> [CHWARAE CERDDORIAETH]