1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Valgrind] 2 00:00:02,000 --> 00:00:05,000 [Nate Hardison, Harvard Universiteti] 3 00:00:05,000 --> 00:00:07,000 Bu CS50.TV, CS50 edir] 4 00:00:07,000 --> 00:00:10,000 C proqramlarının ən çətin bugs bəzi 5 00:00:10,000 --> 00:00:13,000 yaddaş təsərrüfatsızlıq gəlir. 6 00:00:13,000 --> 00:00:15,000 Şeyi qıymaq yolları bir çox var, 7 00:00:15,000 --> 00:00:17,000 yaddaş yanlış məbləği bölüşdürülməsi, o cümlədən, 8 00:00:17,000 --> 00:00:20,000 dəyişənlərin başlamaq üçün unutmadan, 9 00:00:20,000 --> 00:00:23,000 bufer sonunda əvvəl və ya sonra yazı, 10 00:00:23,000 --> 00:00:25,000 və yaddaş neçə dəfə saxlamaq azad. 11 00:00:25,000 --> 00:00:28,000 Əlamətləri aralıq qəzaları dən üçündür 12 00:00:28,000 --> 00:00:30,000 müəmmalı üzerine dəyərlərə, 13 00:00:30,000 --> 00:00:34,000 tez-tez uzaq orijinal səhv çıxarılır yerləri və zaman. 14 00:00:34,000 --> 00:00:37,000 Əsas kök səbəb geri müşahidə problem izlənməsi 15 00:00:37,000 --> 00:00:39,000 çətin ola bilər, 16 00:00:39,000 --> 00:00:42,000 amma xoşbəxtlikdən Valgrind adlı faydalı proqram var 17 00:00:42,000 --> 00:00:44,000 ki, kömək etmək üçün bir çox edə bilərsiniz. 18 00:00:44,000 --> 00:00:47,000 >> Siz imkan Valgrind altında bir proqram run 19 00:00:47,000 --> 00:00:50,000 yığın yaddaş ayırmaları və girişler geniş yoxlanılması. 20 00:00:50,000 --> 00:00:53,000 Valgrind bir problem algıladığında,, siz dərhal verir 21 00:00:53,000 --> 00:00:56,000 Sizə imkan verir ki, birbaşa məlumat 22 00:00:56,000 --> 00:00:58,000 daha asanlıqla tapmaq və bu problemi həll. 23 00:00:58,000 --> 00:01:01,000 Də az ölümcül yaddaş məsələlər üzrə hesabatlar Valgrind 24 00:01:01,000 --> 00:01:04,000 belə yaddaş sızıntıları kimi yığın yaddaş ayrılması, 25 00:01:04,000 --> 00:01:07,000 və azad unutmurlar. 26 00:01:07,000 --> 00:01:10,000 Bizim ayıklama bizim compiler, cingilti, gdb, kimi 27 00:01:10,000 --> 00:01:14,000 Valgrind pulsuz proqram, və bu cihaz quraşdırılıb. 28 00:01:14,000 --> 00:01:16,000 Valgrind, sizin ikili çalıştırılabilir çalışır 29 00:01:16,000 --> 00:01:20,000 sizin. c və ya. h kodunu faylları, 30 00:01:20,000 --> 00:01:23,000 belə ki, proqram bir up-to-tarix nüsxəsi tərtib əmin olmaq 31 00:01:23,000 --> 00:01:25,000 zınqıltı istifadə edərək və ya olun. 32 00:01:25,000 --> 00:01:28,000 Sonra Valgrind altında proqram çalışan ola bilər 33 00:01:28,000 --> 00:01:32,000 yalnız söz Valgrind standart proqram komanda prefixing kimi sadə, 34 00:01:32,000 --> 00:01:35,000 olan Valgrind up başlayır və daxilində proqram çalışır. 35 00:01:35,000 --> 00:01:38,000 Başlayan zaman, Valgrind sıra kompleks yoxdur 36 00:01:38,000 --> 00:01:41,000 yaddaş çek üçün yürütülebilir konfiqurasiya jiggering, 37 00:01:41,000 --> 00:01:44,000 belə onu və yayınlanmasını üçün bir az bilər. 38 00:01:44,000 --> 00:01:48,000 Bu proqram sonra daha yavaş-yavaş, normal həyata olacaq 39 00:01:48,000 --> 00:01:52,000 və başa zaman, Valgrind onun yaddaş istifadə xülasəsi çap olunacaqdır. 40 00:01:52,000 --> 00:01:58,000 Bütün yaxşı gedərsə, bu kimi bir şey görünür: 41 00:01:58,000 --> 00:02:01,000 Bu halda,. / Clean_program 42 00:02:01,000 --> 00:02:04,000 Mən çalıştırmak üçün istədiyiniz proqram yoludur. 43 00:02:04,000 --> 00:02:06,000 Və bu heç bir dəlilləri daşımır isə, 44 00:02:06,000 --> 00:02:09,000 bunu, mən həmişə olduğu kimi komanda sonuna yalnız tack onlara had. 45 00:02:09,000 --> 00:02:12,000 Təmiz proqram I yaradılmış bir silly az proqramı 46 00:02:12,000 --> 00:02:15,000 ki, yığın haqqında ints blokunun üçün yer ayırıb 47 00:02:15,000 --> 00:02:19,000 bəzi dəyərləri onların daxili qoymaq, bütün məhəllə kurtarır. 48 00:02:19,000 --> 00:02:23,000 Bu səhvlər və sızmalar, heç üçün çəkiliş etdiyiniz budur. 49 00:02:23,000 --> 00:02:27,000 >> Digər mühüm metrik ayrılmış bytes ümumi sayı dir. 50 00:02:27,000 --> 00:02:32,000 Sizin daxilolmaların isə megabayt və ya daha yüksək olduqda, proqram asılı olaraq, 51 00:02:32,000 --> 00:02:34,000 bəlkə səhv bir şey edirik. 52 00:02:34,000 --> 00:02:37,000 Siz lazımsız dublikatları saxlanılması edirmi? 53 00:02:37,000 --> 00:02:40,000 Bu yığını istifadə etmək daha yaxşı olardı zaman, saxlanması üçün yığın istifadə edirsiniz? 54 00:02:40,000 --> 00:02:43,000 Belə ki, yaddaş səhvlər həqiqətən pis ola bilər. 55 00:02:43,000 --> 00:02:46,000 Daha açıq olanlar, möhtəşəm qəzaları səbəb 56 00:02:46,000 --> 00:02:49,000 hətta sonra hələ yerini ağır ola bilər 57 00:02:49,000 --> 00:02:51,000 nə dəqiq qəza səbəb oldu. 58 00:02:51,000 --> 00:02:54,000 Yaddaş səhv ilə daha qərəzlə, bir proqram 59 00:02:54,000 --> 00:02:56,000 hələ cleanly tərtib edə bilərsiniz 60 00:02:56,000 --> 00:02:58,000 və hələ də düzgün iş görünə bilər 61 00:02:58,000 --> 00:03:01,000 siz çox vaxt uğurlu almaq üçün idarə, çünki. 62 00:03:01,000 --> 00:03:04,000 Bir neçə sonra "uğurlu nəticələr" 63 00:03:04,000 --> 00:03:07,000 Siz yalnız bir qəza kompüter bir fluke hesab edir ki, ola bilər 64 00:03:07,000 --> 00:03:10,000 lakin kompüter yanlış heç vaxt. 65 00:03:10,000 --> 00:03:13,000 >> Valgrind Running siz görünən yaddaş səhvlər səbəb aşağı izlemek kömək edə bilər 66 00:03:13,000 --> 00:03:18,000 habelə səhvlər lurking tapmaq kimi hətta hələ bilmirəm. 67 00:03:18,000 --> 00:03:22,000 Valgrind bir problem algılar Hər dəfə, o, müşahidə nə haqqında məlumat görüntüler. 68 00:03:22,000 --> 00:03:24,000 Hər bir maddə ədalətli yığcam deyil - 69 00:03:24,000 --> 00:03:27,000 etmiş təlimatı mənbə xətt, məsələ nədir, 70 00:03:27,000 --> 00:03:30,000 cəlb yaddaş və bir az info - 71 00:03:30,000 --> 00:03:34,000 lakin tez-tez sağ yer üçün diqqət yönəltmək üçün kifayət qədər məlumat var. 72 00:03:34,000 --> 00:03:37,000 Burada arabası proqram çalışan Valgrind nümunəsidir 73 00:03:37,000 --> 00:03:40,000 ki, yığın yaddaş yalnış oxu yoxdur. 74 00:03:40,000 --> 00:03:49,000 Biz tərtib heç bir səhv və ya xəbərdarlıq oldu. 75 00:03:49,000 --> 00:03:53,000 Ah-oh, səhv xülasə iki səhvlər var ki, deyir - 76 00:03:53,000 --> 00:03:56,000 ölçüsü 4 iki etibarsız okuma - bytes olmasıdır. 77 00:03:56,000 --> 00:04:01,000 Hər iki pis invalid_read.c əsas funksiyası meydana oxuyur 78 00:04:01,000 --> 00:04:04,000 line 16 və line 19 ikinci ilk. 79 00:04:04,000 --> 00:04:06,000 Nin kodu baxaq. 80 00:04:06,000 --> 00:04:11,000 Printf bizim yaddaş blokunun sonu son bir int oxumaq üçün çalışır, ilk zəng kimi görünür. 81 00:04:11,000 --> 00:04:13,000 Biz Valgrind çıktı geri baxsaq, 82 00:04:13,000 --> 00:04:16,000 biz Valgrind məhz bizə bildirib ki, görürük. 83 00:04:16,000 --> 00:04:19,000 Biz oxumaq çalışdığınız ünvan 0 bayt başlayır 84 00:04:19,000 --> 00:04:22,000 - ölçüsü 16 bayt blokunun sonunda keçmiş 85 00:04:22,000 --> 00:04:25,000 biz ayrılan dörd 32-bit ints. 86 00:04:25,000 --> 00:04:29,000 Yəni, biz oxumaq çalışır ünvanı, sağ bizim blokunun sonunda başlayır 87 00:04:29,000 --> 00:04:32,000 biz pis printf zəng görmək kimi. 88 00:04:32,000 --> 00:04:36,000 İndi etibarsız okuma, bir əqdin böyük kimi görünə bilər 89 00:04:36,000 --> 00:04:39,000 ancaq proqram axını nəzarət məlumatlar kullanıyorsanız - 90 00:04:39,000 --> 00:04:42,000 Məsələn, bir hissəsi kimi, bəyanat və ya loop - 91 00:04:42,000 --> 00:04:45,000 sonra şeyi səssizcə pis bilərsiniz. 92 00:04:45,000 --> 00:04:47,000 Mən invalid_read proqram çalıştırabilirsiniz necə Watch 93 00:04:47,000 --> 00:04:50,000 və adi bir şey həyata olur. 94 00:04:50,000 --> 00:04:52,000 Scary, ha? 95 00:04:52,000 --> 00:04:56,000 >> İndi isə sizin kodu qarşılaşa bilər ki, səhvlər bir çox növ baxaq 96 00:04:56,000 --> 00:04:59,000 və biz onları algılar necə Valgrind görəcəksiniz. 97 00:04:59,000 --> 00:05:01,000 Biz yalnız bir invalid_read nümunə gördüm 98 00:05:01,000 --> 00:05:04,000 İndi nin bir invalid_write kontrol imkan verir. 99 00:05:04,000 --> 00:05:09,000 Yenə tərtib heç bir səhv və ya xəbərdarlıq. 100 00:05:09,000 --> 00:05:12,000 OK, Valgrind Bu proqram iki səhvlər var ki, deyir - 101 00:05:12,000 --> 00:05:15,000 və invalid_write və invalid_read. 102 00:05:15,000 --> 00:05:18,000 Bu kodu kontrol edək. 103 00:05:18,000 --> 00:05:21,000 Biz klassik strlen plus bir səhv bir misal var kimi görünür. 104 00:05:21,000 --> 00:05:24,000 Kodu malloc yer əlavə byte deyil 105 00:05:24,000 --> 00:05:26,000 də / 0 karakter üçün, 106 00:05:26,000 --> 00:05:30,000 belə küç surəti ssubstrlen onu yazmaq üçün getdiyi "cs50 rocks!" 107 00:05:30,000 --> 00:05:33,000 bizim blok sonunda keçmiş 1 byte yazdı. 108 00:05:33,000 --> 00:05:36,000 Biz printf üçün zəng zaman invalid_read gəlir. 109 00:05:36,000 --> 00:05:40,000 Bu / 0 xarakter deyilir zaman Printf etibarsız yaddaş oxu başa 110 00:05:40,000 --> 00:05:43,000 Bu E simli sonunda görünür kimi çap edir. 111 00:05:43,000 --> 00:05:45,000 Amma bu heç Valgrind qaçdı. 112 00:05:45,000 --> 00:05:48,000 Biz küç surəti hissəsi kimi bu invalid_write tutdu ki 113 00:05:48,000 --> 00:05:51,000 əsas xətti, 11 və invalid_read printf hissəsidir. 114 00:05:51,000 --> 00:05:54,000 Valgrind üzrə Rock. 115 00:05:54,000 --> 00:05:57,000 Yenə bu bir böyük kimi görünə bilər. 116 00:05:57,000 --> 00:06:00,000 Biz Valgrind kənarda üzərində bu proqram çalıştırabilirsiniz 117 00:06:00,000 --> 00:06:03,000 və hər hansı bir səhv əlamətləri görmür. 118 00:06:03,000 --> 00:06:06,000 >> Lakin, bax bu bir az variasiya baxaq 119 00:06:06,000 --> 00:06:09,000 necə şeylər həqiqətən pis əldə edə bilərsiniz. 120 00:06:09,000 --> 00:06:14,000 Belə ki, verilmiş, bu kodu yalnız bir az daha çox şeylər sui-istifadə olunur. 121 00:06:14,000 --> 00:06:17,000 Biz yalnız iki strings üçün yığın yer ayrılması edirik 122 00:06:17,000 --> 00:06:19,000 cs50 süxurların uzunluğu, 123 00:06:19,000 --> 00:06:22,000 bu dəfə / 0 xarakter xatırlayaraq. 124 00:06:22,000 --> 00:06:25,000 Amma sonra biz yaddaş blok bir super-uzun string atmaq 125 00:06:25,000 --> 00:06:27,000 S işarə edir. 126 00:06:27,000 --> 00:06:30,000 Hansı təsiri yaddaş blokunda olacaq ki, T bal? 127 00:06:30,000 --> 00:06:34,000 Yaxşı, əgər S yalnız qonşu olan yaddaş T xal, 128 00:06:34,000 --> 00:06:37,000 yalnız sonra gələn, 129 00:06:37,000 --> 00:06:39,000 sonra biz T. hissəsi üzərində yazılı ola bilər 130 00:06:39,000 --> 00:06:41,000 Bu kodu run edək. 131 00:06:41,000 --> 00:06:43,000 Nə oldu. 132 00:06:43,000 --> 00:06:47,000 Biz yığın blokları, həm də saxlanılan strings düzgün çap ortaya çıxdı. 133 00:06:47,000 --> 00:06:49,000 Heç bütün yanlış görünür. 134 00:06:49,000 --> 00:06:52,000 Lakin, bizim kodu geri getmək imkan və 135 00:06:52,000 --> 00:06:55,000 biz cs50 süxurların surəti olduğu xəttini şərh 136 00:06:55,000 --> 00:06:59,000 ikinci yaddaş blok daxil, t ilə işarə etdi. 137 00:06:59,000 --> 00:07:02,000 İndi biz bu kodu çalıştırdığınızda biz olmalıdır 138 00:07:02,000 --> 00:07:06,000 yalnız ilk yaddaş blokunun məzmunu çap görürük. 139 00:07:06,000 --> 00:07:09,000 Whoa, biz küç surəti etmədi baxmayaraq 140 00:07:09,000 --> 00:07:12,000 ikinci yığın bloku hər hansı bir simvol, bir, T ilə işarə 141 00:07:12,000 --> 00:07:15,000 biz bir çap çıxmaq. 142 00:07:15,000 --> 00:07:18,000 Həqiqətən, simli biz ilk blok daxil doldurulmuş 143 00:07:18,000 --> 00:07:21,000 ilk blok və ikinci blok daxil overran 144 00:07:21,000 --> 00:07:23,000 hər şey normal görünür edir. 145 00:07:23,000 --> 00:07:26,000 Valgrind, baxmayaraq ki, bizim əsl hekayə deyir. 146 00:07:26,000 --> 00:07:28,000 Biz də gedin. 147 00:07:28,000 --> 00:07:32,000 O etibarsız Bütün oxuyur və yazır. 148 00:07:32,000 --> 00:07:36,000 >> Səhvi başqa cür nümunə baxaq. 149 00:07:36,000 --> 00:07:39,000 Burada olduqca uğursuz bir şey yoxdur. 150 00:07:39,000 --> 00:07:41,000 Biz, yığın bir int üçün yer qapmaq 151 00:07:41,000 --> 00:07:45,000 p - - Bu yer qeyd etmək və bir int göstərici başlamaq. 152 00:07:45,000 --> 00:07:48,000 Lakin, pointer başlatılmış isə, 153 00:07:48,000 --> 00:07:52,000 ona işarə edir ki, data yalnız yığın ki hissəsində nə junk edir. 154 00:07:52,000 --> 00:07:55,000 Beləliklə, biz int i o data yük zaman, 155 00:07:55,000 --> 00:07:57,000 biz texniki, i başlamaq 156 00:07:57,000 --> 00:08:00,000 lakin biz junk data ilə bunu. 157 00:08:00,000 --> 00:08:03,000 Zəng lazımlı ayıklama makro olan qorumağa 158 00:08:03,000 --> 00:08:06,000 ən tutarlı adına iddia kitabxana müəyyən, 159 00:08:06,000 --> 00:08:09,000 abort öz test vəziyyəti uğursuz proqramı olacaq. 160 00:08:09,000 --> 00:08:11,000 I 0 deyilsə ki,. 161 00:08:11,000 --> 00:08:14,000 Yığın məkanında nə asılı olaraq, p ilə işarə 162 00:08:14,000 --> 00:08:18,000 Bu proqram bəzən iş və digər vaxtlarda uğursuz ola bilər. 163 00:08:18,000 --> 00:08:20,000 Işləyir, biz yalnız uğurlu əldə edirik. 164 00:08:20,000 --> 00:08:24,000 Bu compiler bu səhv tutmaq, lakin əmin iradəsi Valgrind deyil. 165 00:08:24,000 --> 00:08:28,000 Var ki, junk data bizim istifadə irəli gələn səhv oldu. 166 00:08:28,000 --> 00:08:32,000 >> Siz yığın yaddaş ayrılması ancaq bu deallocate və ya azad olmayan zaman, 167 00:08:32,000 --> 00:08:34,000 ki, baş adlanır. 168 00:08:34,000 --> 00:08:37,000 Çıxışları çalışır və dərhal bir kiçik, qısa müddətli proqram üçün, 169 00:08:37,000 --> 00:08:39,000 sızması kifayət qədər zərərsiz, 170 00:08:39,000 --> 00:08:42,000 lakin daha böyük ölçüsü və / və ya uzunömürlülük bir layihə üçün 171 00:08:42,000 --> 00:08:46,000 hətta kiçik sızma böyük bir şey mürəkkəb bilər. 172 00:08:46,000 --> 00:08:49,000 CS50, biz sizə gözləyirsiniz 173 00:08:49,000 --> 00:08:51,000 siz ayırırlar yığın yaddaş bütün azad qayğı, 174 00:08:51,000 --> 00:08:54,000 sizə əl prosesi düzgün idarə etmək bacarıqları qurmaq istəyirik ildən 175 00:08:54,000 --> 00:08:56,000 C. tələb 176 00:08:56,000 --> 00:08:59,000 Bunu etmək üçün, proqram bir dəqiq olmalıdır 177 00:08:59,000 --> 00:09:03,000 malloc və pulsuz zənglər arasında birə-bir qiyabi. 178 00:09:03,000 --> 00:09:06,000 Xoşbəxtlikdən, Valgrind çox yaddaş sızıntıları sizə kömək edə bilər. 179 00:09:06,000 --> 00:09:09,000 Burada leak.c adlı leaky proqram ki ayırıb 180 00:09:09,000 --> 00:09:13,000 yığın yer, o yazır, lakin bu, azad deyil. 181 00:09:13,000 --> 00:09:16,000 Biz olun və Valgrind altında run ilə tərtib 182 00:09:16,000 --> 00:09:18,000 və biz görürük ki, biz yaddaş səhvlər yoxdur isə ki, 183 00:09:18,000 --> 00:09:20,000 biz bir qaçaq var. 184 00:09:20,000 --> 00:09:23,000 Mütləq itirilmiş 16 bytes var 185 00:09:23,000 --> 00:09:27,000 proqramı tərk zaman xatirəsinə göstərici daxilində deyil yəni. 186 00:09:27,000 --> 00:09:30,000 İndi Valgrind, bizə sızması haqqında məlumat ton vermir 187 00:09:30,000 --> 00:09:35,000 lakin biz onun hesabat alt tərəf aşağı verir ki, bu kiçik qeyd edin əgər 188 00:09:35,000 --> 00:09:38,000 ilə təkrar üçün - sızması kontrol = tam 189 00:09:38,000 --> 00:09:41,000 sızdırılan yaddaş tam görmek üçün, 190 00:09:41,000 --> 00:09:44,000 Daha çox məlumat almaq lazımdır. 191 00:09:44,000 --> 00:09:46,000 İndi, yığın xülasəylə 192 00:09:46,000 --> 00:09:50,000 Itirilmiş ki, yaddaş ilkin ayrılıb yerləşir Valgrind bizə deyir. 193 00:09:50,000 --> 00:09:52,000 Biz mənbə axtarır bilmək kimi, 194 00:09:52,000 --> 00:09:55,000 Valgrind biz yaddaş sızan bizə məlumat 195 00:09:55,000 --> 00:09:58,000 leak.c xətti 8 malloc zəng ilə ayrılan 196 00:09:58,000 --> 00:10:00,000 əsas funksiyası. 197 00:10:00,000 --> 00:10:02,000 Pretty uykusuz. 198 00:10:02,000 --> 00:10:04,000 >> Valgrind bu şərtləri istifadə sızması kateqoriyalara: 199 00:10:04,000 --> 00:10:07,000 Əlbəttə itirdi - Bu yığın ayrılmış yaddaş 200 00:10:07,000 --> 00:10:10,000 olan proqram artıq bir göstərici var. 201 00:10:10,000 --> 00:10:14,000 Valgrind siz bir göstərici idi, lakin, çünki takip itirmişdir bilir. 202 00:10:14,000 --> 00:10:17,000 Bu yaddaş mütləq əks olunur. 203 00:10:17,000 --> 00:10:20,000 Dolayı itirilmiş - Bu yığın ayrılmış yaddaş 204 00:10:20,000 --> 00:10:24,000 bu yeganə göstəricilərinə də itirilmiş olunur. 205 00:10:24,000 --> 00:10:27,000 Məsələn, bir bağlı siyahısında ilk node üçün pointer itirilmiş əgər, 206 00:10:27,000 --> 00:10:30,000 sonra ilk node özü, mütləq itirilmiş olacaq 207 00:10:30,000 --> 00:10:34,000 sonrakı qovşaqlarının dolayı itirilmiş olacaq edir. 208 00:10:34,000 --> 00:10:37,000 Ola bilsin itirdi - Bu yığın ayrılmış yaddaş 209 00:10:37,000 --> 00:10:41,000 olan Valgrind bir göstərici və ya olub-olmadığını əmin ola bilməz. 210 00:10:41,000 --> 00:10:44,000 Hələ müyəssər yığın ayrılmış yaddaş 211 00:10:44,000 --> 00:10:47,000 proqram hələ exit bir göstərici var olan, 212 00:10:47,000 --> 00:10:50,000 hansı adətən o deməkdir ki, bu qlobal dəyişən xal. 213 00:10:50,000 --> 00:10:53,000 Bu sızıntıları kontrol üçün, siz də seçimi daxil olacaq 214 00:10:53,000 --> 00:10:55,000 - Hələ müyəssər = yes 215 00:10:55,000 --> 00:10:58,000 Valgrind sizin sehr edir. 216 00:10:58,000 --> 00:11:01,000 >> Bu müxtəlif hallarda, onların təmizlənməsi üçün müxtəlif strategiyalar tələb edə bilər 217 00:11:01,000 --> 00:11:05,000 lakin sızmalar aradan qaldırılmalıdır. 218 00:11:05,000 --> 00:11:08,000 Təəssüf ki, sızması təyinat etmək çətin ola bilər 219 00:11:08,000 --> 00:11:11,000 pulsuz yanlış zənglər proqram partlatmaq bilər-ci ildən. 220 00:11:11,000 --> 00:11:14,000 Məsələn, biz invalid_free.c baxsaq, 221 00:11:14,000 --> 00:11:18,000 biz pis yaddaş deallocation bir nümunə oldu. 222 00:11:18,000 --> 00:11:21,000 Bütün blok azad bir zəng olmalıdır nə 223 00:11:21,000 --> 00:11:24,000 yaddaş, int_block ilə işarə 224 00:11:24,000 --> 00:11:27,000 əvəzinə hər int ölçülü bölmə azad cəhdi olmuşdur 225 00:11:27,000 --> 00:11:29,000 fərdi yaddaş. 226 00:11:29,000 --> 00:11:32,000 Bu katastrofik bilməyəcəyik. 227 00:11:32,000 --> 00:11:34,000 Boom! Hansı bir səhv. 228 00:11:34,000 --> 00:11:36,000 Bu, mütləq yaxşı deyil. 229 00:11:36,000 --> 00:11:39,000 Hata bu cür ilə vurulmuş edirik, baxmayaraq ki, siz, harada baxmaq bilmirəm 230 00:11:39,000 --> 00:11:41,000 yeni yaxşı dost geri düşür. 231 00:11:41,000 --> 00:11:44,000 Siz guessed - Valgrind. 232 00:11:44,000 --> 00:11:47,000 Valgrind, həmişə olduğu kimi, qədər dəqiq bilir. 233 00:11:47,000 --> 00:11:50,000 Bu alloc və pulsuz sayar uyğun deyil. 234 00:11:50,000 --> 00:11:52,000 Biz 1 alloc və 4 kurtarır var. 235 00:11:52,000 --> 00:11:55,000 Və Valgrind də olduğu ilk pis pulsuz bizə deyir - 236 00:11:55,000 --> 00:11:58,000 bu infilak tətikləyən bir - gələn - 237 00:11:58,000 --> 00:12:00,000 line 16. 238 00:12:00,000 --> 00:12:03,000 Gördüyünüz kimi, azad pis zənglər, həqiqətən pis 239 00:12:03,000 --> 00:12:05,000 biz proqram sızması imkan gəlir 240 00:12:05,000 --> 00:12:08,000 Siz funksionallığı doğru almaq üçün çalışırıq isə. 241 00:12:08,000 --> 00:12:12,000 Proqram düzgün iş yalnız sonra sızması axtarır başlamaq, 242 00:12:12,000 --> 00:12:14,000 hər hansı digər səhvlər olmadan. 243 00:12:14,000 --> 00:12:16,000 >> Və biz bu video üçün var hamısı. 244 00:12:16,000 --> 00:12:18,000 İndi nə gözləyir? 245 00:12:18,000 --> 00:12:21,000 İndi proqramları Valgrind run gedin. 246 00:12:21,000 --> 00:12:25,000 My name Nate Hardison edir. Bu CS50 edir. [CS50.TV]