>> [Musiqi ifa]
>> DAVID J. Malan: Yaxşı.
>> [Gülüş]
>> Geri xoş gəlmisiniz.
Bu CS50 edir.
Bu həftə beş sonu.
Və indiyə qədər, biz olduqca çox var verilən qəbul olunub ki,
siz var ki, bu compiler, cingilti mövcud Bu yolu ilə invoking edilmişdir
digər alət ki, birtəhər olun çağırıb magically sizin mənbə kodu çevirir
obyekt kodu da adet sıfır və olanları nəzərə ki, kompüter CPU, mərkəzi
processing unit, həqiqətən anlayır.
Ki, bir sıra var həyata Lakin bu çevrilir olan başlıq altında gedir
giriş və çıxış arasında.
>> Və mən ki, biz əti təklif etmək istərdim bir az daha açıqlamaq ki, həyata
bu dörd addımı adlı bir şey var pre-emalı, bir şey
gördük ki, tərtibi, adlı bir şey montaj adlanır və
bir şey birləşdirən çağırıb.
Belə ki, indiyə qədər bizim bəzi proqramları, biz kəskin daxildir etdi.
Bu yaxınlarda bəzi kəskin yaşadım sabitləri üçün müəyyən edir.
Belə çıxır o şeyi ki, hash simvolu və ya prefixed olunur
funt-simvolu pre-prosessor var direktivləri.
Yalnız bu söyləyən bir xülya yolu həqiqətən ki, bir kod line
əvvəl başqa bir şey çevrilir kompüter hətta çevirmək üçün cəhd üçün
adet sıfır və olanları nəzərə proqramı.
>> Məsələn, kəskin standart daxildir I / O. H, olduqca çox yalnız getmək deməkdir
qabaqda, faylları məzmunu qamarlamaq stdio.h və sağ orada yapışdırıb.
Belə ki, heç bir adet sıfır və yenilərinin hələ o nöqtədə.
Bu, həqiqətən yalnız bir əvəz var.
Və sözdə zamanı həyata pre-emal mərhələ, zaman
həqiqətən xüsusi cingilti çalıştırmak və ya Əksər hallarda olun.
Belə ki, bütün bu baş edilmişdir İlk avtomatik beləliklə qədər.
>> Sonra tərtib addım gəlir.
Amma biz oversimplified olduğunuz tərtibi.
Bir proqram tərtib həqiqətən deməkdir ki, C kimi bir şey almaq
mənbə kodu biz, yazı olduğunuz bir şey toplaşmaq adlı etmək.
Məclis dil aşağı səviyyədə dil ki, təşəkkürlə, biz olacaq
qədər nəsib olmaq Bu dövr yazın.
Lakin ən aşağı səviyyədə var sözün yazmağa başlayın Bu mənada
əlavə və çıxmaq və çoxaltmaq və yük yaddaşından və saxlamaq yaddaş üçün
çox əsas təlimat bir kompüter, başlıq altında,
həqiqətən anlayır.
>> Nəhayət, montaj dil edir biz də etdik ki, adet sıfır və olanları
İndiyədək izah.
Və həqiqətən Nəhayət, sözdə var faza birləşdirən hansı rəftar
birləşdirən yalnız bir an görmək Sizin adet sıfır və adet sıfır ilə olanları və
əvvəl olanları digər insanların Siz yaratmışdır.
>> Beləliklə, bu super sadə proqram hesab edir.
Bu həftə 1 idi.
Bu, sadəcə, Dünya Salam, dedi: ekranda.
Biz cingilti bu qaçdım.
Yoxsa biz onun vasitəsilə olun qaçdı olan cingilti qaçdım.
Və vaxt outputted yerləşir bir adet sıfır və olanları.
Var həyata Lakin bu çevrilir Bir ara addım.
Burada artıq getmək varsa - oops etmədi, hələ onu görmək istəyirəm.
Mən avadanlığına buraya gedin və mən hello.c, burada açmaq
Eyni proqramdır.
Bəs mən terminal etmək gidiyorum burada pəncərə Mən gidiyorum edir
, cingilti run daha çox Yap bütün dörd avtomatlaşdırır
bizim üçün o addımlar.
Və mən cingilti-S edəcəyəm və alıram daxil sonra hello.c və sonra.
>> Mən bir yanıb-sönən tez almaq yenidən, bu yaxşıdır.
İndi bir az böyük pəncərə, Mən burada gedit açmaq üçün gedirəm.
Mən bir fayl açmaq üçün gidiyorum çıxır, hello.s bu adlanır
ki, montaj dil ehtiva edir Mən əvvəllər edilir.
Bu toplantının deyirlər nə dil, kifayət qədər aşağı səviyyədə
talimatları ki, Intel CPU və ya hər hansı bu, daxili ki, deyil
anlayır.
Və mov hərəkət edir. zəng üçün , çox aşağı səviyyədə funksiyası zəng.
alt çıxmaq üçün.
>> Siz daxilində müəyyən bir CPU var zaman kompüter, nə edir
haqqında fərqli, qarşı digər CPU'lar bazar, olan təlimat o
anlayır və tez-tez necə ondan səmərəli bəzi icra edir necə sürətli edir
həmin təlimatlar.
İndi bu barədə daha ətraflı üçün, siz bilər kollec növbəti Fall CS61.
Amma burada bir neçə, məsələn, var tanış ola bilər ki, tanımlayıcıları.
hello.c proqramın adıdır.
>> . Mətn -
maraq çox orada deyil yalnız indi xatırlayıram, mətn
harada seqment, Bazar ertəsi kimi, yaddaş Proqram həqiqətən qədər çatır.
Belə ki, ən azı yayğın var orada tanış olmuşlar.
Burada, əlbəttə, bir qeyd edir əsas funksiyası.
Aşağı scrolling, bu şeylər baxın adlandırılan aparatlarının, çox kiçik chunks
haqq CPU yaddaş daxilində.
Və mən hətta aşağıya fırladın əgər daha, mən bir növ bax
ASCII dolayısı ilə qeyd.
Və həqiqətən ki, simli var hello, vergül, dünya.
>> Belə ki, uzun hekayə qısa, bu olmuşdur avtomatik olaraq, sizin üçün baş
başlıq altında bu dəfə bütün.
Və nə baş edilmişdir həqiqətən dəfə siz cingilti run, və ya yolu ilə etdik
, Ilk əldə etdiyiniz etmək kodunu, bu
montaj dil deyilən.
Sonra cingilti bu toplantının konvertasiya edilir aşağı adet sıfır və olanları dil.
Və biz başlayan Slayd edir on Həftə 0 bizim müzakirə -
ve sonra həftə 1.
Və sonra nəhayət, o adet sıfır və yenilərinin ki, adet sıfır və olanları ilə birləşir
həmin kitabxanalardan biz alaraq olduğunuz Standard I / O və ya kimi verilən
String Kitabxana və ya hətta ki, CS50 kitabxana.
>> Belə ki, daha bu şəkil çəkmək vizual, biz hello.c var.
Və bu, əlbəttə, printf istifadə Salam dünya, demək fəaliyyət göstərir.
Tərtibi addım onu ​​aşağı edir fayl biz yalnız, hətta hello.s gördüm
adətən silindi ki, baxmayaraq ki, sizin üçün avtomatik olaraq.
Amma bu toplantı kod orta addım.
Və sonra biz toplaşmaq toplaşmaq zaman zaman dil, necə deyərlər, ki,
o adet sıfır və olanları almaq.
Beləliklə, biz bu gün səmərəli zoomed sonra nə verilən biz alaraq sonra,
mənbə kodu gedir deməkdir kodu etiraz edir.
>> Amma nəhayət, indi həmin şəkil - üzərində ilə itələmək edək
sol tərəfdəki.
Və Qeyd edək ki, top var Mən stdio.h bildirdi.
Ki, daxil olduğunuz bir faylı demək olar ki, bütün-ci
biz yazdıq proqramları.
Və onun məzmunu faylı surəti yapışdırılır almaq,
effektiv kodu üstün.
Lakin bu ki, bir kompüter çıxır sistemi bir yerdə, ehtimalla bir var
kimsə illərdə yazmışdır ki stdio.c fayl əvvəl ki, bütün həyata keçirir
elan edilmişdir funksiyaları stdio.h edir.
>> İndi əslində bu yəqin ki, deyil, və ya hətta sizin Mac və ya PC
CS50 Aracı xam C koddur.
Kimsə artıq tərtib daxil . O obyekt kodu üçün fayl və ya. A
Paylaşılan bir kitabxana istinad olan fayl, ki, önceden götürmüş və oldu
sizin üçün əvvəlcədən tərtib.
Amma həqiqətən var Güman paralel olaraq bizim kompüter stdio.c haqqında
cingilti ilə.
Sizin kodu tərtib edib və toplandı.
stdio.c 's kodu tərtib olunur yığılmış, bu son ki,
burada, addım, biz birtəhər var link, belə danışmaq, sizin adet sıfır və yenilərinin
birinə onun adet sıfır və olanları ilə nəticə etibarilə ki, sadə proqram
Salam yalnız çağırıb.
>> Belə ki, ki, sehrli bütün var İndiyədək baş vermişdir.
Və bu davam edəcək prosesləri verilmiş, lakin həyata
şirəli ətraflı çox var orada altında davam.
Bu nə sizin Intel içərisində kompüter
xüsusilə fərqli.
>> Belə ki qeyd, siz istəyirəm əgər bu cümə nahar üçün bizə qoşulmaq getmək nə
adi yer cs50.net/rsvp üçün, 1:15 PM bu cümə.
İndi bir neçə elanlar.
Beləliklə, biz yaxşı xəbər var.
Və biz bəzi pis xəbər var.
Burada yaxşı xəbər ilə başlayın.
>> [Iniltili]
>> Bütün hüquqlar.
Bəli, belə ki, texniki bir bayram var o qədər bizdən hədiyyə deyil.
Əlbəttə Ancaq daha sonra pis xəbər.
>> [Iniltili]
>> Mən çox vaxt sərf Bu animasiyalar haqqında.
>> [Gülüş]
>> Nəzərdən sessiyası olacaq Bu Bazar ertəsi gəlir.
Bu 5:30 PM olacaq.
Biz bütün bu detalları sizə xatırlatmaq olacaq kurs üzrə e-mail vasitəsilə
gün yalnız bir neçə haqqinda.
Bu film və mövcud ediləcək qısa müddət sonra.
Edə bilməz, belə ki, əgər Bazar ertəsi gecə slot, narahat olmayın.
Bölmələr bu gələn həftə də olacaq viktorina üçün baxış yönəldir.
Sizin bölmə olan Monday, aktivdirsə həqiqətən universitet bayramı biz
hələ bölməsində cavab verir.
Siz sadəcə edə bilməz Bölmə siz davam olduğunuz
üz ki, gözəl.
Bir bazar və ya çərşənbə axşamı bölmə və ya iştirak Jason bölməsində ilə tune-in, olan
mövcud online.
>> Belə ki, bir pis xəbər daha.
Belə ki, tədris görə, Gələn cümə mühazirə var.
Amma yaxşı xəbər -
Aydındır ki, mən bu barədə çox vaxt sərf etmişdir.
>> [Gülüş]
>> Biz cümə mühazirələr növbəti qeyri-edəcəyik.
Belə ki, bizim üçün bir hədiyyə olacaq, belə ki, həqiqətən gözəl möhlət ola bilər
Bu həftə və bu səbəbdən iki həftə arasında.
Heç mühazirələr gələn həftə, yalnız kiçik bir Belə ki, Siz olmalıdır olan kiçik viktorina,
getdikcə heyecan almaq.
>> Belə ki, indi bizim diqqət çevirmək bildirin həqiqətən daha əyani bir şey
və daha çox maraqlı və səhnəyə təyin etmək üçün üfüqdə olacaq nə üçün
həftə yalnız bir neçə.
Ilk viktorina sonra biz çevirmək lazımdır bizim problem dəstləri başqa diqqət
domain xüsusi problem, ki, ümumiyyətlə Suclari və ya təhlükəsizlik.
>> Bu məsələ ilə Əslində, ənənə set mənim üçün biri
arasında gəzmək fellow ya CA'lar tədris bəzi fotoşəkillər alaraq kampus
müəyyən edilə bilən lakin qeyri Aşkar insanlar, sonra yerləri, və ya şeyi, hər il
elə təsadüfən silmək üçün idarə və ya digital media kart korlaya
ki, kamera daxilində var.
Amma heç bir böyük.
Mən irəli getmək və plug bilər mənim kompüter edir.
Mən, bu, bir məhkəmə image edə bilərsiniz ki, adet sıfır çıxarmaq, danışmaq və
ki, yaddaş kartı olanlar off, olub onun bir SD kart və ya kompakt flash kart və ya
Sizinlə tanış olduğunuzda nə.
Və sonra, biz ki, əl bilər.
>> Və beləcə digər arasında qabaqda meydan, Sizin üçün hər şeyi, yazmaq olacaq
Bütün dəstə bərpa ki, C kodu Mənim üçün JPEGs və aşkar olacaq
insanların, yerləri, və ya şeyi.
Və biz də bu problemi, danışmaq lazımdır seçin və gün haqqında, gəlmək
ümumiyyətlə qrafika.
Biz, bir kurs onları istifadə etdiyiniz çıxmaq üçün.
Verilən Amma cür qəbul etdik Bu yüksək səviyyəli anlayışlar var
düzbucaqlı və oval edir.
Amma başlıq altında piksel var.
Və başlamaq üçün idi bu barədə düşünürük.
Yoxsa p-set 4 düşünmək lazımdır üçün Sizin kərpic arasında fərq haqqında nə
tez top arasında hərəkət edirik üçün ekran çıxmaq.
Belə ki, bu anlayışı var ki, ekranda nöqtələr
artıq oyun minir.
>> İndi görürsünüz nə olsa da, nə bir kompüter ekran alın.
Əgər yaxşı və ya izləyib varsa pis TV, bahis onlar olduqca çox var
technophobes kimi tamaşaçılar müalicə kim həqiqətən
çox kompüter haqqında bilirik.
Və belə ki, polis üçün çox asandır demək əməliyyat, siz
mənim üçün o qədər təmiz?
Və ya sağ, artırmaq?
Gücləndirilməsi ildə buzz söz kimi ən hər hansı bir cinayət bağlı şou.
Bir çox almaq əgər reallığıdır bunu bir şübhəli bulanık şəkil
pis bir şey, siz bilməzsiniz yalnız artırır.
Siz sonsuz zoom edə bilməz.
Siz kimsə nin glint görmək bilməz ki törətmiş göz
baxmayaraq xüsusilə cinayət TV Bu yayılması.
>> Və belə ki, motivasiya edək ki, Qarşıdan gələn problem bir fikir ilə müəyyən
Bəzi göstərir ilə tanış ola bilər.
>> [Video playback]
>> -OK.
İndi yaxşı bir görünüşünü almaq edək.
>> It-tutun.
Geri Run.
>> Bir dəqiqə gözləyin.
Doğru gedin.
>> -Var.
Ki Freeze.
>> Ekran-Tam.
>> -OK.
Ki Freeze.
>> Ya, ki edəcək up-bərkidin?
>> Ki, oğlan üzrə-Vector arxa təkər ilə.
>> Bu spot sağ burada-Zoom.
>> -Ilə sağ avadanlıq, imaged genişləndirmiş və itilənmiş bilər.
>> -Ne var?
>> -Bu genişləndirilməsi proqramıdır.
>> -Can hər hansı bir qədər ki, sil?
>> -Bilmirəm.
İT artırmaq edək.
>> Bölmə A-6-gücləndirilməsi.
>> -I ətraflı genişləndirilir və -
>> -I artırmaq üçün kifayət qədər var edirəm.
Mənim ekran üçün buraxın.
>> Onun göz əks-gücləndirilməsi.
>> Bu axır-Let video genişləndirilməsi.
>> -Edgar, bu gücləndirə bilər?
>> On-Bekle.
>> -I've bu əks üzərində çalışır.
>> -Kiminsə əks.
>> -Reflection.
>> Bir əks-var insanın üzü.
>> -Bu əks.
>> -Bir əks edir.
>> Güzgü üzrə-zoom.
>> -Siz bir əks bilərsiniz.
>> -Bilərsinizmi buradan image artırmaq?
>> -Can sağ burada onu artırmaq?
>> -Can siz onu artırmaq?
>> -Can biz bu inkişaf?
>> -Can siz onu artırmaq?
>> Ikinci on-tutun, mən artırmaq lazımdır.
>> Qapısını in-kiçildin.
>> -X10.
>> -Zoom.
>> [Gülüş]
>> Daxil Move
>> Dayandırmaq, gözləyin.
>> -Stop.
>> It-durdur.
>> Ətrafında 75 dərəcə-Qayıt şaquli edin.
>> [Gülüş]
>> Hissəsi ilə geri dayandırmaq və qapı haqqında yenidən.
>> Bir resim Gücləndirici-Got ki, bitmap bilər?
>> -Bəlkə biz Pradeep Sen istifadə edə bilərsiniz metodu Windows daxil görürük.
>> -Bu proqram sənətinin dövlətdir.
>> -Bu icon dəyər off edir.
>> -Ilə sağ birləşməsi alqoritmləri.
>> -O işıqlandırma alqoritmlər qəbul oldu növbəti səviyyəsi və mən onları istifadə edə bilərsiniz
Bu fotoşəkil artırır.
>> On-Lock və Z-axis genişləndirmək.
>> -Gücləndirilməsi.
>> -Freeze və genişlənəcəkdir.
>> [END video playback]
>> DAVID J. Malan: Belə ki, Problem Set 5 orada irəli yalan nə edir.
Beləliklə, biz tezliklə daha yaxşı anlaşma əldə edəcəyik vaxt və niyə bilər
və bu yolla təmin edə bilməz.
Amma birincisi, bizim diqqət qayıtmağınıza imkan biz will bloklar bəzi
ki, hekayə demək lazımdır.
>> Beləliklə, biz bu şəkil çəkdi Xatırladaq Bazar ertəsi və bir az keçən həftə.
Və bu şeyi layout təsvir kompüter yaddaşında zaman
Bəzi proqram çalışan.
Top texnologiya seqment, geri, istinad faktiki adet sıfır və olanları
ki, proqram daxildir.
Var ki, aşağıda, bir sıra başlatılmış və ya uninitialized data, hansı adətən
və ya sabitləri kimi şeylər aiddir strings və ya ki, qlobal dəyişənlər
əvvəlcədən elan edilmişdir.
Orada yığın, amma biz edəcəyik geri bir az olduğu.
>> Və sonra yığını var.
Çox da tepsiler bir yığın kimi yaddaş olur yerləşir yeməkxana, bu
laylı və zaman laylı bir proqram nə?
Üçün yığını istifadə nədir?
>> Bəli?
>> Funksiyasının edin.
Bir funksiyası zəng heç bir zaman, bu, onun yaddaş qəlpə verilən
yerli dəyişənlər və ya onun parametrləri.
Və pictorially, biz görürük ki, hər bir ilə zaman ardıcıl funksiyası adlanır
zənglər B zənglər C zənglər D, onlar yığını üzərində laylı almaq.
Və bu dilim hər ərzində yaddaş əhəmiyyətli bir unikal vüsət edir
ki, funksiya üçün, bu, əlbəttə, siz tərəfdən istəyirsinizsə problemlidir
bir funksiyası başqa bir parça istədiyiniz veri
mutate və ya dəyişdirmək üçün.
>> Belə ki, imkan bizim həll nə idi Bir yığın təmsil funksiyası
daxili yaddaş dəyişdirmək üçün nizama salmaq başqa yığını çərçivəsində?
Necə bir-birinə bu iki söhbət edirsiniz?
Belə göstəricilərinə və ya URL yolu ilə, burada olan, yenə yalnız təsvir
xüsusi xatirəsinə tərəfindən yol bite sayı, xüsusi
dəyər bilər.
Beləliklə də biz davam son dəfə xatırlayıram bir də hekayə və baxdı
ədalətli arabası proqramı.
Bu proqram bir neçə arabası deyil səbəbləri, lakin ən worrisome biridir
nə yoxlamaq üçün uğursuz çünki?
>> Bəli, bu girişinizi kontrol edə bilmir.
Üzr istəyirik?
>> 12 simvol daha çox edin.
Belə çox şıq, memcopy zəng zaman, ki, adı təklif kimi, yalnız
ikinci arqument dən nüsxədə yaddaş ilk mübahisəyə.
Üçüncü dəlil, çox şıq edir Siz əmin olun yoxlanılır
, bu halda, uzunluğu daha çox surəti bar, simvol sayı,
hedef daxil olan bu array C. Amma problem olduğunu nə
C özü kifayət qədər böyük olmadıqda ki, idarə etmək?
Siz sayı surəti olacaq Sizə verilən olduğunuzu bayt.
Amma əslində nə var sizin üçün yer çox bayt?
>> Bəli, bu proqram çox ağılsızlıq yalnız kor-koranə bu nə almaq üçün gəlir
verilmiş, hello backslash 0 edir simli qısa böyük əgər
ki, beş chars kimi.
Amma faktiki 12 simvol var və ya əgər 1200 simvol, biz sonuncu dəfə gördüm
yalnız tamamilə olacaq ki, yaddaş üzerine ki,
Sizə aid deyil.
Və ən pis halda, siz yazmaq ki, əgər biz deyilir ki, orada qırmızı hissəsi
ünvan qayıdıb -
Bu yalnız burada kompüter avtomatik, sizin üçün, arxasında
üz səhnələri, tucks 32-bit dəyəri lazımdır nə ünvan üçün xatırladır
qayıtdığınız zaman foo, bu digər funksiyası, icra edilir.
Bu növ çörək qırıntı var bu qayıdır.
Siz potensial ki, üzerine edin siz pis adam istəyirsinizsə, ola bilər bilər
potensial təhvil almaq Birinin kompüter.
Və ən əlbəttə will əksər hallarda bu qəza.
>> İndi bu problem yalnız mürəkkəbləşdirirdi Biz yaddaş haqqında danışmağa başladı kimi
ümumiyyətlə idarə edilməsi.
Və malloc, yaddaş ayrılması, bir biz ayrılması üçün istifadə edə bilərsiniz ki, funksiyası
Biz əvvəlcədən bilmirəm zaman yaddaş bəzi lazımdır bilər.
Belə ki, məsələn, mən geri əgər burada avadanlığına.
Mən keçən dəfə hello2.c dən açmaq baxdı burada bu proqram, geri
bu kimi bir az bir şey, yalnız üç xətləri -
Adınızı, sonra simli adı, dövlət sol, getstring bərabərdir.
Və sonra biz onu çap istifadəçi adı.
>> Belə ki, bu super sadə proqram idi.
Aydın, mənə davam bildirin və salam-2 edir.
Mən dot çizgi salam-2 etmək gedirəm.
Adınızı dövlət -
David.
Daxil edin.
David Salam.
OK iş görünür.
Amma nə həqiqətən davam burada başlıq altında?
Birinci edək bir qat geri soymaq.
String biz var yalnız sinonimi deyil nə üçün həyata?
Char ulduzu.
Elə bir az daha gizli edək lakin daha çox texniki doğru ki, bu
o deməkdir ki, bir char ulduz deyil, adı, bəli, bir dəyişir.
Amma nə ad mağaza ünvanı bir az qəribə hiss edən bir char,
Mən bir string geri alıram, çünki.
Mən çox alıram chars bir char deyil.
>> Amma əlbəttə, yalnız birinci növbədə yadda char ünvanı yerləşir
Çünki niyə bütün simli var?
Necə anlamaq edirsiniz olduğu sonu simli əvvəlində biləndir?
Bu backslash sıfır.
Belə ki, bu iki ip ucları ilə anlamaq əvvəlinə və sonuna qədər
hər hansı bir string onlar etdiyiniz belə uzun kimi, düzgün null ilə formalaşır
Terminator ki, backslash sıfır.
>> Amma bu getstring çağırır.
Və o getstring çıxır bütün bu vaxt cür olmuşdur
bizim üçün aldadıcı.
O, əmin olmaq, bu əmək bunu edilmişdir istifadəçi bir string almaq.
Amma ki, yaddaş nerde gələn olunubmu?
Burada şəkil geri və əgər yalnız bir olan müəyyən müraciət
an əvvəl ki, yığını burada funksiyaları də'vət olunduqları zaman yaddaş, gedir
ki, məntiq, siz getstring zəng zaman, və sonra yazın
D-A-V-I-D, daxil olduğu D-A-V-I-D backslash sıfır əsaslanan, saxlanılan
hekayə biz uzaq izah etdik?
>> Bu olmaq görünür ki, yığını, sağ?
Siz string almaq zəng zaman almaq yığını yaddaş az dilim.
Belə ki, D-A-V-I-D səbəb dayanır backslash sıfır saxlanılır
var yığını.
Amma yekunları getstring, bir dəqiqə gözləyin ki, simli, necə deyərlər, o deməkdir ki,
bu yemekhane dən tray var yığını off alınır.
Və biz ki, tezliklə kimi son dəfə deyib funksiyası yekunları və sizi ki,
yığını off tray, belə danışmaq, nə Siz qalıqları haqqında kəsb edə bilər
yaddaş?
I növ sual işarələri kimi redrew onlar səmərəli olmaq, çünki
unknown dəyərlər.
Bəzi Onlar yeniden istifadə oluna bilər Növbəti funksiyası adlanır.
>> Başqa sözlə, biz nə varsa saxlanılması olunacaq -
Mən tez şəkil çəkmək lazımdır burada yığını.
Biz alt rəsm üçün nə varsa mənim yaddaş seqmentinin və biz demək lazımdır
Bu yaddaş yerinə ki, əsas və bəlkə ARG c və işğal
ARG v və proqramın başqa bir şey varsa, getstring adlanır zaman,
ehtimalla getstring edir Burada yaddaş yığın.
Və sonra D-A-V-I-D birtəhər Bu funksiya ildə başa çatır.
Və mən oversimplify gedirəm.
Ancaq nin boynuna qoy onun D-A-V-I-D ki, backslash sıfır.
Belə ki, bu çox bytes istifadə olunur getstring üçün çərçivəsində.
>> Amma tezliklə getstring yekunları kimi, biz Sonuncu dəfə bildirib ki, artıq bu yaddaş
burada olur - woops -
bütün səmərəli silinə olur.
Və biz sual kimi indi bu hesab edə bilər işarələri bilən çünki
hansı ki, yaddaş olmaq olacaq.
Həqiqətən, mən çox tez-tez Zəng funksiyaları getstring başqa.
Və Mən bəzi digər zəng kimi getstring çox funksiyası, bəlkə deyil
Biz yalnız baxdı bu proqram lakin bir sıra digər, şübhəsiz ki, bir-birinə
funksiyası verilir başa bilər yığını bu növbəti spot.
>> Belə ki getstring mağazalar ola bilməz Yığını D-A-V-I-D edirəm, çünki
dərhal çıxışı itirirlər.
Amma biz onlar getstring bilirik nə yalnız qaytarır?
Bu dönən deyil Mənə altı simvol.
Bu, həqiqətən nə etdi qayıdır Biz keçən dəfə bağlamaq?
Ilk ünvanı.
Belə ki, birtəhər, siz getstring çağıranda bunun üçün yaddaş yığın bölüşdürülməsi var
simli ki, istifadəçilər növü və o sonra qaytarılması ünvanı.
Və bu zaman istədiyiniz çıxır Bu yaddaş ayrılması funksiyası
yol və zəng edən şəxsə geri qaytarılması ki, funksiyası üçün ünvan
yaddaş ki, yığın, siz tamamilə müəssisələrdə yığını qoymaq bilməz
alt, çünki funksional yalnız var çox sizin ola gedir
tez, belə ki, siz yəqin ki, təxmin edə bilərsiniz biz yəqin ki, onu silkələmək olacaq
əvəzinə, sözdə yığın.
>> Belə ki, yaddaş nin alt arasında layout və yaddaş nin üst
layout seqmentləri bütün dəstə var.
Bir yığın və sağ Yuxarıda yığın edir.
Və yığın yalnız müxtəlif yığın edir funksiyaları üçün istifadə ki, yaddaş
Onlar adlı etdiyiniz zaman.
Bu zaman uzun müddətli yaddaş üçün istifadə bir funksiyası bəzi qamarlamaq istəyirəm
yaddaş və ona asılı qalmaq edə üzərində nəzarət kaybetmeden.
>> İndi bəlkə dərhal bilər bu olduğunu görmək
mükəmməl dizayn lazım.
Proqram yaddaş ayrılan kimi, yığını, və ya zəng kimi daha çox və
daha çox funksiyaları və ya ayrılması kimi kimi off malloc ilə yığın yaddaş
getstring bunu nə aydın qaçılmaz problem görünür?
>> Sağ.
Faktla kimi bu oxlar bir-birinə işarə edilir
yaxşı ümidlər vermir.
And olsun ki, biz bunu çox sürətlə avariya bilər yolları hər hansı bir sayı bir program.
Əslində, mən var bilər edirəm Bu təsadüfən bir dəfə aparılır.
Və ya, əgər bunu edək qəsdən indi.
Mənə davam və tez super yazmaq edək bir proqram dontdothis.c çağırıb.
Və indi burada getmək və edəcəyik kəskin stdio.h daxil yoxdur.
Funksiyası foo edir bəyan edək heç bir dəlilləri olan
etibarsız yaxşı kimi adlandırılmışdır.
>> Və foo edəcəyimiz yeganə şey yəqin olmayan zəng foo,
akıllıca fikir, ancaq belə ola bilər.
KBB əsas edilsin.
İndi əsas gedir yeganə etmək üçün həmçinin foo zəng edir.
Və yalnız kicks, mən getmək gidiyorum irəlidə burada və Hello "printf demək
foo. "
>> OK.
Mən hər hansı bir səhv etmədiyini Belə ki, Dontdothis dot çizgi olun.
Və edək böyük bir pəncərə bunu -
dot çizgi, dontdothis.
Hadi.
Oh Uh.
Görünür, siz bunu edə bilərsiniz.
Lanet olsun.
OK.
Gözləyin.
Yanındayız.
Biz mi -
We Make ilə istifadə etməyib.
>> [SIGHS]
>> Bilirəm amma biz hesab yalnız silindi.
Ah, evet.
Lanet olsun.
Bu Rob həll edir.
Nə?
Bu, çox sadə.
Bəli, biz optimallaşdırılması söndürülmüşdü.
OK, bye durmaq.
İndi daha yaxşı hiss edirəm.
OK.
Bütün hüquqlar.
>> Belə ki, bu derleyeceğiz edək -
Siz dontdothis olun.
Siz bu adını dəyişmək üçün ola bilər yalnız bir anda dothis.c.
Orada biz gedin.
Təşəkkür edirik.
OK.
Beləliklə, mən çap edilmişdir ki, bir şey yalnız həqiqətən
prosesi aşağı yavaşlatan olan biz ki, nöqtəsinə çatmış olardı.
OK.
Phew!
>> Beləliklə, nə həqiqətən gedir?
Yalnız bir kənara kimi orada səbəbi edir giriş baxımından bir şey etdiyini və
çıxış yavaş çalışır, çünki ilə simvol yazmaq lazımdır
ekran Bu hərəkət etmək var.
Belə ki, uzun sözün qısası, mən, həqiqətən idi belə səbirsiz oldu, biz var ki,
habelə bu son nəticədə görüldü.
Mən çap-up gezmeye var, indi ki, biz dərhal görürük.
Belə ki, niyə belə olur.
Bəli, əlbəttə ki, sadə izahat, ki, foo yəqin ki, olmamalıdır deyil
özü zəng bilər.
>> İndi ümumi şəkildə, bu recursion edir.
Və biz bir neçə həftə fikir əvvəl recursive yaxşıdır.
Recursion bu sehrli yolu müfəssəl super özünüzü ifadə.
Və yalnız işləyir.
Lakin bütün əsas xüsusiyyəti var danışdıq etdiyiniz recursive proqramları
haqqında baxdı indiyə qədər, hansı onlar nə idi ki?
Bəzi ağır kodlu olan bir baza halda, bəzi hallarda bildirib ki, hal
aydın olan foo, zəng etməyin Burada iş deyil.
>> Beləliklə, nə həqiqətən baş verir bu şəkil baxımından?
Bəli, zaman əsas foo, o çağırır yaddaş bir dilim alır.
Foo foo çağırır zaman, o olur yaddaş bir dilim.
Foo foo çağırır, o, bir dilim alır.
Bu dilim alır.
Foo qaytarılması heç vaxt, çünki.
Biz o biri silinmə heç edirik yığını olan çərçivəsində.
Belə ki, biz yığın vasitəsi ilə əsən deyilik KİM NƏ başqa bilir, qeyd etmək
biz hüdudlarından overstepping edirik yaddaş seqmentinin sözdə.
Seqmentasiya yalan getmək səhv.
>> Belə ki, orada ki, həll aydın etmirəm.
Lakin böyük dolayısı ki, bəli, edir tamamilə bir limit var
o nə kimi, müəyyən deyil, hətta siz bir zəng edə bilərsiniz bir çox funksiyaları
proqramı, neçə dəfə bir funksiyası özü zəng edə bilərsiniz.
Biz recursion vəz etdilər Belə ki, hətta bu potensial sehrli şey kimi
SİQMA üçün həftə öncə neçə funksiyası, və biz məlumat almaq
strukturları və CS50, digər görürsünüz bunun üçün ərizə, bu deyil
mütləq yaxşı şey.
Funksiyanı özü çağırır, Çünki əgər bir baza var, hətta, özü çağırır
halda, siz baza halda basmayın əgər 1000 zənglər və ya 10,000 zənglər üçün tərəfindən
Siz oda tökülmək ola bilər ki, zaman Sizin qondarma yığını və hit haqqında
yaddaş bəzi digər seqmentlər.
Belə ki, çox dizayn ticarət-off deyil zəriflik arasında arasında
Sizin xüsusi möhkəmliyini həyata keçirilməsi.
>> Belə ki, bir İşin mənfi tərəfi odur var ya biz var nə başqa bir Gotcha
İndiyədək bunu edilmişdir.
Mən getstring adlı olduqda -
mənə salam-2 geri gidelim.
, Mən getstring zəng alıram Qeyd edək ki, bir ünvan dönür.
Və biz bu gün iddia ünvanı yığın edir.
İndi çap edirəm ki ünvanda string.
Amma deyilən heç vaxt sonra getstring qarşı.
Biz kimi bir funksiyası calll heç vaxt etdik burada əl geri ungetstring,
yaddaş.
Amma səmimi biz yəqin ki, olmalı idi.
Çünki biz kompüter xahiş saxlamaq əgər kimi kimsə xatirəsinə tərəfindən yol
getstring lakin, şübhəsiz ki, geri vermək heç çox yol borcludur
biz yaddaş tökülmək vasitəsi problemləri.
>> Və əslində, biz bu üçün baxa bilərsiniz onun istifadə yeni alət ilə problemlər
yazın bir az sirli edir.
Amma mənə irəli getmək və onu splash bildirin yalnız bir anda ekranda.
Mən irəli getmək və Valgrind çalıştırmak üçün gidiyorum olan ilk komanda parametri ilə
line arqument adı proqram salam-2.
Və təəssüf ki, bu çıxış amansızlıqla edir
heç bir yaxşı səbəbdən kompleksi.
Yəni biz bütün mess görürük.
David my name dövlətdir.
Belə ki, proqramın həqiqətən çalışır.
İndi biz bu çıxış almaq.
>> Belə Valgrind oxşar gdb ruhuna edir.
Bu se başına ayıklama deyil.
Amma bu yaddaş checker var.
Bu davam edəcək bir proqram proqramı və siz bir xahiş əgər demək
yaddaş üçün kompüter və heç vaxt onu təhvil geri, bununla da var o deməkdir ki
bir yaddaş sızıntısı.
Və yaddaş sızması pis olmaq üçün edirlər.
Və kompüter istifadəçiləri var Yəqin ki, bu bir olub, hiss
Mac və ya PC.
Əgər üçün kompüter istifadə və bir neçə ildə rebooted deyil isə
gün, və ya sadəcə bir çox var çalışan proqramları və lənətləmək şey
bir itiləyici dayana yavaşlatır, və ya ən azı Çünki, istifadə etmək super annoying var
hər şey yalnız super yavaş var.
>> İndi səbəbləri hər hansı bir sayı ola bilər.
Bu sonsuz loop, bir səhv ola bilər kiminsə kodu və ya daha çox sadəcə, bu,
daha çox istifadə etdiyiniz demək bilər Sizin çox yaddaş, və ya çalışır,
kompüter həqiqətən var.
Və bəlkə bir proqram bir səhv var yaddaş tələb saxlamaq.
Il brauzerlər üçün bədnam idi Bu, daha çox yaddaş tələb
lakin geri verilməsi heç vaxt.
Şübhəsiz ki, yalnız məhdud varsa yaddaş miqdarı, xahiş bilməz
üçün sonsuz bir çox dəfə yaddaş bəzi.
>> Və belə ki, baxmayaraq ki, burada nə daha Valgrind çıxış edir
nəzər üçün lazımsız kompleksi Birincisi, bu maraqlı hissəsidir.
Heap -
çıxış istifadə.
Belə ki, burada nə qədər yaddaş idi müəssisələrdə yığın istifadə
vaxt mənim proqram çıxıldı -
bir blok yəqin altı bayt.
Beləliklə, mən əlləri dalğa gidiyorum nə bir blokdur.
Daha, yalnız bir yığın edir düşünün yığın texniki söz.
Altı bayt ancaq -
ki, altı bayt nə istifadə hələ də?
>> Eynilə elə.
D-A-V-I-D backslash sıfır beş məktub adı plus null terminator.
Belə ki, bu proqram qeyd Valgrind ki, ilə, yəqin, altı bytes istədi
getstring yolu, lakin heç vaxt geri verdi.
Və əslində, bu, belə ola bilər mənim proqram üç deyil Aşkar əgər
xətləri, lakin 300 xətləri var.
Beləliklə, biz, həqiqətən, başqa komanda verə bilər line arqumentinə Valgrind üçün
daha çox verbose edir.
Bu xatırlamaq bir az annoying var.
Amma əgər -
nin görək.
Keçirtmək -
Bu sızıntı olub -
hətta mən xatırlamıram bu tərəfdən off nə.
>> - Sızıntısı kontrol tam bərabərdir.
Yep, təşəkkür edirəm.
- Sızıntısı kontrol tam bərabərdir.
Daxil edin.
Eyni proqram çalışır.
Yenidən David yazın.
İndi bir az daha ətraflı bax.
Amma yığın xülasə aşağıda olan dörd eynidir - ah,
Bu gözəl növüdür.
İndi Valgrind həqiqətən axtarır Mənim kodu çətindir bir az.
Və bu, yəqin ki, deyən oldu satır malloc -
biz Uzaklaştırmak.
Line -
biz nə line görmürəm.
Amma malloc ilk günahkar deyil.
Malloc bir blog var.
>> Bütün hüquqlar?
OK, no.
Sağ?
Mən getstring çağırıb.
getstring yəqin malloc çağırır.
Yaxşı kodu line Şübhəlinin olması üçün günah
Bu yaddaş ayrılan?
Gəlin kim malloc yazdı güman uzun kifayət qədər ki, ətrafında olmuşdur
onların günah.
Belə ki, yəqin ki, mina var.
cs50.c ildə getstring - bir var ki, kompüter haradasa Fayl -
line 286 günahkar görünür.
İndi cs50 olmuşdur Fərz edək ki, Bunu zaman layiqli məbləği ətrafında
biz də məsum var.
Və bu getstring yəqin deyil hata yalan deyil ki,
salam-2.c line 18.
>> Elə nəzər bildirin ki, xətt 18 oldu.
Oh.
Elə bu xətti mütləq deyil buggy, özlüyündə, lakin səbəbi
ki, yaddaş sızıntısı arxasında.
Belə ki, super sadəcə, nə daxilən ki, burada həlli ola bilərmi?
Biz yaddaş üçün xahiş istəyirsinizsə, heç vaxt geri verilməsi, və bir görünür
problem çünki vaxt mənim kompüter üzərində yaddaş tökülmək bilər, yavaş bilər
aşağı, pis şeylər, yaxşı, baş verə bilər sadə intuitiv həlli var?
Yalnız geri verir.
>> Siz bunu necə yaddaşında pulsuz bilərəm?
Yaxşı, təşəkkürlə bu, olduqca sadə yalnız pulsuz adını demək.
Və biz əvvəl bu həyata heç etdik.
Amma əhəmiyyətli hesab edə bilər malloc qarşı kimi pulsuz.
pulsuz əks olunur yaddaş ayrılması.
Belə ki, indi mənə bu derleyeceğiz bildirin.
Salam-2 olun.
Mənə daha run edək. salam-2 David.
Belə ki, bu iş görünür tam eyni şəkildə.
Amma Valgrind geri getmək və yenidən əgər mənim yeni ki, eyni komanda
tərtib proqram yazaraq əvvəl mənim ad -
gözəl.
Heap xülasə -
- çıxış istifadə
sıfır blokları sıfır bayt.
Bu super gözəl, bütün yığın blokları azad edilmişdir.
No sızması mümkündür.
>> Belə ki, Problem Set 4 ilə gələn lakin Problem Set 5 Suclari ilə
və irəli, bu da olacaq Sizin düzgün tədbir
siz asılı olmayaraq proqramı və ya yaddaş sızması yoxdur.
Amma təşəkkürlə, siz səbəb ola bilər yalnız onlara daxilən, vasitəsilə
kiçik proqramlar üçün asan, arguably edir lakin böyük proqramlar üçün daha,
, Bu böyük proqramları, Valgrind siz müəyyən kömək edə bilər
xüsusi problem.
>> Amma başqa bir problem var ki, yarana bilər.
, Bu, mənə burada bu faylı açmaq edək yenə bir qədər sadə misal.
Lakin edək nə diqqət Bu proqram edir.
Bu memory.c adlanır.
Biz bu sonra bu gün yazmaq lazımdır Bu gün mənbə kodu zip.
Və mən adlı bir funksiyası var ki, görürsünüz dəlilləri və heç bir edir ki, f
heç bir şey qaytarır.
Line 20, mən yəqin elan alıram bir int və bu x zəng etmək üçün göstərici.
Mən təyin alıram qayıdacaqsınız malloc dəyəri.
Və yalnız am neçə bayt, aydın olmaq Mən yəqin ki, malloc geri almaq
bu vəziyyətdə?
>> Yəqin ki, 40.
Harada ki, əldə edə bilərəm?
Yaxşı, bir int tez-tez Xatırladaq ki, əgər 4 bayt, ən azı bu deyil
cihaz, dəfə 4 10 açıqcası 40.
Belə malloc bir ünvan qayıdır bir yaddaş yığın və saxlanılması ki,
X nəticədə müraciət edir.
Belə ki, aydın olmaq nə sonra baş verir?
Yaxşı, məni geri keçmək bildirin burada şəkil.
Mənə yalnız mənim alt cəlb edək kompüter yaddaş, mənə davam imkan və
bütün düzbucaqlı cəlb edən mənim RAM bütün təmsil edir.
>> Biz demək lazımdır ki, yığını alt edir.
Və mətn seqment var ki, uninitialized data.
Amma yalnız mücərrəd o gidiyorum uzaq nöqtə, nöqtə nöqtə kimi başqa şeylər.
Mən yalnız bu müraciət gidiyorum üst yığın kimi.
Və sonra bu şəkil altında, Əsas təmsil etmək gedirəm
bir dilim yaddaş vermək yığını haqqında.
F, mən bunu bir dilim vermək gidiyorum yığını üzrə yaddaş.
İndi, mən müraciət var daha mənbə kodu.
Əsas üçün yerli dəyişənlərin hansılardır?
Göründüyü kimi heç bir şey ki, dilim deyil səmərəli boş və ya hətta böyük
Hesab edirəm ki, tərtib etdiyiniz kimi.
Amma f, mən yerli dəyişən var olan x adlanır.
Beləliklə, mən irəli getmək və f vermək gidiyorum bu x zəng yaddaş yığın.
>> 10 dəfə 4 və indi malloc Ki, olduğu malloc 40, Belə ki,
yaddaş gələn?
Biz Şəkil çəkilən deyil etdik əvvəl bunu bəyənir.
Ancaq nin səmərəli olduğunu güman edək belə bir, burada gələn
iki, üç, dörd, beş.
İndi bu 40 lazımdır.
Belə ki, yalnız təklif nöqtə, nöqtə, nöqtə edəcəyik hətta daha çox yaddaş var ki
yığın geri gəlir.
İndi ünvan nədir?
Gəlin bizim ixtiyari seçmək həmişə olduğu kimi müraciət -
Yəqin ki, olacaq, hətta Ox123, tam fərqli bir şey olacaq.
Bu ilk byte və ünvanı var Mən malloc xahiş edirəm yaddaş edir.
>> Belə ki, qısa bir xətt 20, icra sözün nədir
Burada x daxilində saxlanılır?
Ox123.
Və öküz maraqsız edir.
Bu yalnız burada deməkdir hexadecimal sayı.
Amma nə əsas var mən mağaza var nə ki, X, yerli dəyişir.
Amma onun veri növü, yenə bir int bir ünvan.
Yaxşı, mən Ox123 saxlamaq üçün gedirəm.
Ancaq yenə də, bir az da ki, əgər Mən fırladın əgər, lazımsız yerə mürəkkəbdir
geri, bu üz abstrakt bilər olduqca əsaslı və yalnız deyirlər ki, x bir
yaddaş ki, yığın üçün pointer.
>> OK.
İndi əl-sual aşağıdakı kimidir -
line 21, çıxır, arabası deyil.
Niyə?
>> Üzr istəyirik?
Bu yoxdur -
bir daha ki.
Bəli, bu pulsuz deyil.
Belə ki, ikinci, lakin.
Belə ki, digər lakin xüsusi biri var line 21.
>> Eynilə elə.
Kodu Bu sadə xətt yalnız bir Buffer Overflow, bufer dağıtmaq.
Bufer yalnız yaddaş yığın deməkdir.
Ancaq yaddaş ki, yığın ölçüsü edir 10, 10 integers, deməkdir, əgər biz
ki, sintaktik şəkər istifadə edərək daxil indeksi array notation və meydanda
Mötərizədə sizə imkanına malik x bracket 0 x bracket 1 x,
bracket nöqtə, nöqtə, nöqtə.
x bracket 9 ən böyük biridir.
Mən x bracket 10 belə edərsə, Mən, həqiqətən, yaddaş gedirəm?
>> Bəli, mən 10 int varsa -
Gəlin əslində bütün çəkmək burada bu həyata.
Belə ki, ilk beş idi.
Burada digər beş ints var.
Belə ki, x bracket 0 burada. x bracket 1 burada. x bracket 9 burada. x bracket
10 burada olan, mən izah edən edirəm deməkdir line 21, kompüter qoymaq üçün
sayı, harada?
Sayı 0 harada?
Bəli, bu, bəli 0 var.
Ancaq əslində onun 0 bir təsadüf növüdür.
Bu sayı ola bilər 50, biz qayğı bütün.
Amma biz x bracket onu qoymaq çalışdığınız Bu olan 10,
sual işarəsi tərtib edilir yaxşı bir şey deyil.
Bu proqram çox yaxşı bilər nəticəsində qəza.
>> İndi davam və görək bu halda , həqiqətən, nə olur olunur.
Yaddaş olun, çünki fayl memory.c adlanır.
Gəlin irəli getmək və çalıştırmak proqram yaddaş.
Beləliklə, biz xoşbəxt var, əslində, bu, görünür.
Biz uğurlu var.
Lakin indi Valgrind əgər nin görək.
İlk baxışdan, mənim proqram bilər mükəmməl doğru görünür.
Lakin ilə Valgrind mənə run edək - Sızıntısı kontrol yaddaş tam bərabərdir.
>> Və indi bu çalıştırdığınızda -
maraqlı.
Yanlış da ölçüsü 4 yazmaq memory.c xətti 21.
Memory.c xətti 21 biri?
Oh, maraqlı.
Lakin gözləyin.
Size 4, istinad ki, nə?
Mən yalnız bir, yazdın lakin bu ölçüsü 4 var.
Nə 4?
Bu bir int, çünki bu yenə dörd bytes edir.
Belə Valgrind bir səhv aşkar ki, Mənim kodu nəzər salan etmədi.
Və bəlkə sizin TF ki, və ya deyil.
Amma əmin aşkar ki Valgrind nə biz hətta orada bir səhv etdik
biz uğurlu var və baxmayaraq kompüter qərar, eh, mən qəza fikrində deyiləm
bir byte, bir toxunub yalnız çünki Siz ki yaddaş int yetmeyecek
əslində öz.
>> Yaxşı, burada arabası başqa budur.
Ünvan -
Bu crazy axtarır ünvanı hexadecimal edir.
Yalnız haradasa yığın-yığın deməkdir ki, Ölçüsü 40 blokunun sonra sıfır bayt
yerləşir.
Məni bura Uzaklaştırmak və görək, əgər Bu bir az daha faydalıdır.
Maraqlı.
40 bayt mütləq itirilmiş 1 zərər rekord 1.
Yenə də, daha çox sözləri burada faydalıdır.
Lakin, qeyd xətləri əsasında burada yəqin ki, diqqət etməlidir mənim
digər səhv diqqət?
Memory.c xətti 20 bənzəyir.
>> Biz line 20 geri əgər, ki, bu siz əvvəllər müəyyən bir.
Və bu buggy lazım deyil.
Amma biz bu təsiri bərpa etdik.
Belə ki, necə mən ən azı düzəltmək yoxdur bu səhvlər biri?
Mən line 21 sonra nə ola bilər?
Mən, x pulsuz edə bilər yaddaş geri vermək.
Və mən bu səhv necə düzeltirim?
Mən mütləq getməlidir heç bir uzaq 0'dan.
Mənə cəhd və bu yenidən run edək.
Bağışlayın, mütləq getmək heç bir uzaq 9 artıqdır.
Yaddaş olun.
Valgrind mənə təkrar edək böyük pəncərə.
İndi baxın.
Gözəl.
Bütün yığın blokları azad edilmişdir.
No sızması mümkündür.
Və burada yuxarıda qeyd var Yanlış hüququ bir daha.
>> Yalnız görməmiş almaq və alaq etmək görmək başqa bir nümayişə
kimi nəzərdə getmək deyil -
Mən bir an əvvəl xoşbəxt almaq idi.
Və bu 0 olması bəlkə lazımsız yanlış.
50, bir qədər ixtiyari nə edək sayı, yaddaş dot çizgi yaddaş etmək -
hələ uğurlu olsun.
Heç şaqqıltılı oldu.
Mən, həqiqətən, bir şey edə Güman ağılsız, mən 100 edin.
, Mənə yaddaş yeniden yapmak edək dot çizgi yaddaş -
daha şanslı var.
Necə 1000 haqqında?
kənarda ints, təxminən, harada olmalıdır?
Yaddaş olun -
Lanet olsun.
>> [Gülüş]
>> OK.
Nin artıq ətrafında mess edək.
Yaddaş təkrar.
Orada biz gedin.
Bütün hüquqlar.
Belə ki, yəqin siz index 100,000 ints Siz olmalı yerləşir kənarda
yaddaş, pis şeylər baş verir.
Belə ki, bu açıq-aydın deyil ağır, sürətli qaydası.
Mən mühakimə istifadə cür idi və səhv orada almaq üçün.
Amma bu, çünki, uzun hekayə qısa kompüter yaddaş da bölünür
bu şeylər daxil seqmentləri çağırıb.
Və bəzən, kompüter həqiqətən bir az daha çox yaddaş verdi
Sizin üçün xahiş edir.
Amma səmərəliliyi üçün, bu yalnız daha asan var daha çox yaddaş almaq, yalnız sizə xəbər
Siz onu bir hissəsini əldə edirik ki,.
>> Və bəzən uğurlu almaq, Buna görə də, siz toxunmaq edə bilər
yaddaş sizə aid deyil.
Siz heç bir təminat yoxdur ki, nə dəyər siz orada qalacaq qoymaq çünki
kompüter hələ də deyil düşünür sizin, amma mütləq davam deyil
olan yaddaş bir seqment hit kompüter və bir səhv kimi vadar
burada bu.
Bütün hüquqlar.
Sonra heç bir sual yaddaş haqqında?
>> Bütün hüquqlar.
At, sonra isə burada bir nəzər salaq biz alaraq olduğunuz bir şey
çox bir müddət verilən, hansı cs50.h. adlanan bu faylı var
Bu bir fayl.
Bu yalnız bütün dəstə var top up şərh.
Və bu halda baxdı ola bilər Siz cihaz ətrafında dürtülmək.
Lakin bu ki, bütün vaxt, zaman çıxır biz kimi string istifadə üçün istifadə edərkən
sinonimi, biz elan vasitələri ki, sinonimi bu idi
növü müəyyən etmək üçün typedef söz.
Və biz mahiyyətcə deyərək edirik etmək char ulduz üçün sinonimi Dize.
Bu vasitə olan yığını olaraq bilinən bu təlim alüminium disklər yaradıldı
simli.
>> İndi burada yalnız bir prototip var getchar üçün.
Biz əvvəl Göründüyü bilər, lakin var həqiqətən nə yoxdur. getchar
, dəlilləri yox alır char qaytarır.
getdouble, dəlilləri yox edir ikiqat qaytarır.
getfloat dəlillər yoxdur, qaytarır edir bir float və s.
getint burada edir. getlonglong burada edir.
Və getstring burada edir.
Və bu.
Bu bənövşəyi xətt başqa preprocessor edir səbəbiylə direktiv
onun başında hashtag.
>> Bütün hüquqlar.
Belə ki, indi mənə cs50.c. daxil bildirin
Və biz bu barədə çox uzun danışmaq olmaz.
Amma nə bir fikir vermək üçün bütün bu davam
vaxt mənə gidelim -
Gəlin getchar yoxdur.
Belə ki, getchar əsasən şərh edir.
Lakin bu kimi görünür.
Belə ki, bu faktiki funksiyası biz olduğunuzu getchar
verilən alaraq mövcuddur.
Və biz bu bir istifadə yoxdur, baxmayaraq ki, tez-tez, əgər heç, ən azı ki,
nisbətən sadə.
Belə ki, bir alaraq dəyər burada göz atınız.
>> Belə getchar, sonsuz loop var qəsdən belə yəqin.
O çağırıb - və bu cür kodu gözəl təkrar özümüzü yazdı.
Bu getstring çağırır.
Nə Çünki bir char almaq deməkdir?
Bəli, siz də almaq üçün cəhd edə bilərsiniz bütün istifadəçi mətn xətti
sonra yalnız bir nəzər bu simvol.
Line 60, burada bir az var bir ağlı başında olma çek bit.
Getstring null döndü, əgər nin davam edək.
Bir şey yanlış getdi.
>> İndi bu qədər zəhlətökən, lakin yəqin ki, C. char max adi
təmsil yalnız nə onun adı əsasında?
Bu daimi var.
Bu da sayısal değer kimi sizinlə təmsil edə bilər char böyük
yəqin ki sayı olan bir bite, Ən böyük sayı olan 255,
, səkkiz bit təmsil sıfırdan başlayaraq.
Beləliklə, mən zaman, bu funksiya, bu istifadə etdik yalnız, çünki bu kodu yazı
bir şey getchar yanlış gedir amma əgər həyatında onun məqsədi bir qayıtmaq üçün
char, siz elə etmək lazımdır ki, istifadəçi üçün siqnal
bir şey yanlış getdi.
Biz null geri bilməz.
Bu null bir göstərici olduğunu çıxır.
Və yenə getchar var bir char qayıtmaq üçün.
>> Belə ki, Konvensiyanın bir şey gedir əgər yanlış, siz proqramçı, və ya ki,
Bu halda, mənə kitabxana ilə, mən idi ədalətli, əgər özbaşına qərar
bir şey yanlış gedir, mən gedirəm həqiqətən olan nömrə 255, qayıtmaq
biz Yuzerin tipi bilməz deməkdir tərəfindən təmsil karakter
biz idi, çünki sayı 255 onu oğurlamaq bir qondarma sentinel dəyər kimi
bir problem təmsil edir.
İndi çıxır ki karakter 255 siz yazın şey deyil
klaviatura, belə ki, heç bir böyük deyil.
Istifadəçi hiss etmir Mən bu xarakter oğurlanmış etdik.
Amma heç bir üzrə man pages görmək əgər bir kompüter sistemi bəzi arayış
deyir ki, daim bu kimi bütün caps səhv daimi qüdrətinin hallarda
qaytarılır etdi bütün bir insan var il əvvəl özbaşına qərar qəbul edilib
Bu xüsusi dəyər və geri bu halda daimi zəng
bir şey yanlış gedir.
>> İndi sehrli burada aşağı olur.
Birincisi, mən line 67 elan alıram iki simvol, C1 və C2.
Və sonra line 68, həqiqətən var xatırladan ki, bir kod line
bizim dostumuz printf verilmiş ki, quotes yüzdə Cs yoxdur.
Amma burada neler bilərsiniz. sscanf string Scan vasitələri -
biçimlendirilmiş scan deməkdir simli, bundan dolayı sscanf.
Bu nə deməkdir?
Bu simli sscanf keçir deməkdir.
Və line nə edir daxil olan istifadəçi
Siz format string kimi sscanf keçir nə scanf deyir ki, bu
Siz istifadəçi kimi daxil tipli etmişdir ümid
Daha sonra keçə-iki ünvanları Bu halda yaddaş chunks,
Mən iki placeholders var.
Beləliklə, mən bu ünvanı vermək gidiyorum C1 və C2 ünvanı.
>> Və bir funksiyası vermək Xatırladaq ki Bəzi dəyişən ünvanı, var
olan ima?
Funksiyası nəticəsində nə edə bilər bu bir ünvan verilməsi
dəyişən kimi fərqli dəyişən özü?
Bu, doğru dəyişə bilərsiniz?
Əgər kimsə bir fiziki xəritəsi olsaydı ünvanı, orada getmək və edə bilərsiniz
onlar həmin ünvanda istədiyiniz hər hansı.
Burada eyni fikri.
Biz sscanf, iki ünvanına keçərlərsə hətta yaddaş chunks, bu kiçik
yaddaş, C1 və C2 az chunks, lakin biz onların ünvanı demək
sscanf dəyişə bilərsiniz.
>> Həyatda sscanf məqsədi Beləliklə, biz oxumaq adam səhifə oxumaq üçün nə
istifadəçi tipli, olan istifadəçi üçün ümid Bir xarakter ildə yazılmış və bəlkə
başqa xarakter və hər hansı istifadəçi tipli, ilk karakter gedir
burada, ikinci xarakter burada gedir.
İndi bir kənara kimi, bu, siz ki, yalnız sənədlərin bu bilirik
Mən orada boş qoymaq ki, yalnız mən qayğı yoxdur o deməkdir ki, əgər
istifadəçi Space bar bir neçə edib o bir dəfə alır əvvəl
xarakter, mən ignore gidiyorum hər hansı bir ağ sahəsi.
Ki, Mən bilirəm sənədlərin.
>> Ikinci% c var ki ağ boşluq sonra əslində
qəsdən.
Mən aşkar etmək istəyirsinizsə istifadəçi qədər berbat və ya əməkdaşlıq etməyib.
Mən istifadəçi yalnız yazdığınız ümid edirem bir xarakteri, ona görə də mən ümid edirəm
ki, sscanf yalnız qayıtmaq üçün gedir dəyəri 1 Mən oxumaq, yenə, çünki
sənədlərin, sscanf məqsədi ilə həyat sayına qayıtmaq üçün
dolu ki dəyişənlər istifadəçi girişi ilə.
>> Mən iki dəyişənlərin keçdi ünvanları, C1 və C2.
Hesab edirəm ki, baxmayaraq ki, ümid edirem yalnız bir onları həlak olur, çünki əgər sscanf
yekunları 2, güman var məntiqi ima?
Istifadəçi yalnız mənə bir vermədi xarakter kimi mən ona və ya onun.
Onlar yəqin ki, at tipli ən azı iki simvol.
Mən əvəzinə ikinci yox idi əgər % C, mən yalnız bir olan
Açığını daha asan olacaq yanaşma, mən ilk baxışdan hesab edirəm ki,
siz qəbul etmək fikrində deyilik istifadəçi sizə daha çox verilməsi edilibsə
həqiqətən istəyirdim daha daxil etmə.
Belə ki, bu gizli forması səhv yoxlanılması.
>> Amma burada nə görürsünüz.
Mən istifadəçi mənə bir verdi əminəm ki, xarakteri, mən bunu, xətti azad
getstring qarşı, hansı öz növbəsində Mən geri sonra malloc istifadə edir və
C1, mən ümid etdiyini karakter istifadəçi təmin və yalnız təmin.
Belə ki, tez yalnız glimpsed, lakin getchar haqqında hər hansı bir sualınız?
Biz digər bəzi qayıda bilərsiniz.
>> Yaxşı, mənə davam və bunu edək - yalnız həvəsləndirmək, indi güman bizim
bir həftə plus vaxt müzakirə, bu structs.h adlı bir fayl.
Və yenə bu yalnız bir dad edir qarşıda yalan ki, bir şey.
Amma bildiriş bir çox Bu şərh edir.
Mənə vurğulamaq imkan yalnız İndi maraqlı hissəsidir.
typedef -
həmin söz daha var.
typedef biz string bəyan istifadə xüsusi bir veri növü kimi.
Siz yeni yaratmaq üçün typedef istifadə edə bilərsiniz zaman mövcud olmayan məlumat növləri
C icad edilmişdir.
Məsələn, int C. char ilə gəlir C. ikiqat C. ilə gəlir ilə gəlir Lakin
bir şagirdin heç bir anlayışı yoxdur.
Və hələ bu olduqca faydalı olardı saxlayan bir proqram yazmaq edə
dəyişən bir tələbə ID sayı, onların adı və onların evi.
Başqa sözlə, üç ədəd məlumatların bir int və istəyirəm
simli və digər simli.
>> Typedef ilə, nə olduqca güclü bu və söz sturct haqqında
strukturu, siz 2013-ci ildə proqramçı, həqiqətən, sizin öz müəyyən edə bilərsiniz
il mövcud deyil ki, məlumat növləri əvvəl ancaq ki, məqsədləri uyğun.
Və belə ki, burada 19 vasitəsilə xətləri 13- biz kimi yeni bir veri növü elan edirik
bir int, lakin bu tələbə çağırır.
Və daxilində bu dəyişən gedir bir int, simli, - üç şey ola
və simli.
Beləliklə, siz həqiqətən nə hesab edə bilər Bu baxmayaraq, burada baş bir
Bu gün üçün bir sadələşdirilməsi bit, Bir tələbə mahiyyətcə gedir
bu kimi baxmaq.
Onun bir yığın olacaq şəxsiyyət ilə yaddaş, adı
sahəsində bir ev sahə.
Və biz bu chunks istifadə edə bilərsiniz yaddaş və onlara daxil aşağıdakı.
>> Mən struct0.c daxil varsa, burada bir nisbətən uzun, lakin sonra
kodu modeli ki, Bu yeni oyun istifadə edir.
Belə ki, ilk, mənə diqqəti cəlb edək top qədər maraqlı hissələri.
Sharp tələbələr 3 müəyyən bəyan bir daimi adlı tələbə və verir
yalnız özbaşına sayı 3 mən istifadə üç tələbələr var
indi bu proqramı.
Burada əsas gəlir.
Və bildiriş, necə elan yoxdur tələbələrin bir sıra?
Yaxşı, mən yalnız eyni sintaksis istifadə edin.
Sözü tələbə aydın yeni.
Amma tələbə, sinif, bracket tələbələr.
>> Belə ki, təəssüf ki, çox var Burada şərtlər təkrar istifadəsi.
Bu yalnız bir rəqəmdir.
Beləliklə, bu üç deyən kimi.
Sinif I istədiyiniz nə dəyişən zəng etmək üçün.
Hesab edirəm ki, tələbələr zəng edə bilər.
Ancaq sinif, bu bir sinif deyil obyekt yönümlü Java cür yol.
Bu, sadəcə tələbə sinfi var.
Və hər bir element data type ki, sıra tələbəsidir.
Beləliklə, bu bir az fərqlidir və bir şey söyləyərək
bu kimi, bu, yalnız var -
Mən üç tələbələr vermək deyən alıram və array sinif çağırırıq.
>> Bütün hüquqlar.
İndi burada dörd loop var.
Bu oğlan tanış - təkrarlamaq up on sıfırdan üç.
Və burada sintaksis yeni parça var.
Proqram, mənə təklif olacaq Bu tələbə vermək insan,
Bir int olan ID.
Burada siz hansı sintaksis var da ID sahəsində bir şey saxlamaq
yeri sinif bracket I. Belə ki, Bu sintaksis yeni deyil.
Bu, yalnız mənə səkkizinci vermək deməkdir sinif tələbəsi.
Amma bu simvolu yeni.
İndiyədək biz dot istifadə edə bilməz etdik Bu kimi ən azı ildə kodu.
Bu o deməkdir kimi tanınan struct getmək Bir tələbə və orada bir şey qoymaq.
Eynilə, bu sonrakı xətti, 31, getmək irəli və qoymaq nə istifadəçi
Burada adı və nə onlar üçün nə ev, eyni şey, davam və
. evinə qoydu.
>> Beləliklə, bu proqram nə nəticədə nə?
Siz bir az iltifat bilərsiniz.
Mənə davam və structs 0 edirik edək dot çizgi struct 0 tələbə ID 1,
David Mather, tələbə ID 2 deyirlər.
Rob Kirkland, tələbə ID 3.
Lauren Leverit -
və bu proqram nə yalnız, ki, yalnız tamamilə əsassız edir
Mən bu məlumat ilə bir şey etmək istədim Mən necə bizə öyrətdiklərindən sonra indi
structs istifadə, yalnız olmuşdur Bu əlavə loop.
Mən tələbə serialın üzərində təkrarlamaq.
Mən, bəlkə də indi tanış dost, istifadə simli, stircomp müqayisə
çek 8 tələbə ev Mather bərabər?
Və əgər, yalnız bir şey çap özbaşına istəyirəm, bəli, edir.
Ancaq yenə də, yalnız mənə imkanlar verilməsi və istifadə və yeniden
Bu yeni dot notation Yeniden.
>> Belə ki, kim haqlı, qayğıları?
Bir tələbə proqramı ilə gəlir qədər özbaşına, lakin o çıxır
biz faydalı şeyi edə bilər ki, Bu, misal üçün aşağıdakı.
Bu daha mürəkkəbdir struct edir C. Bu, bir çox və ya daha çox sahələrdə var
qədər cryptically adına.
Amma heç bir qrafik eşitdim əgər bitmap adlı fayl formatı, BMP, bu
çıxır ki, bitmap fayl biçimi olduqca çox ki, bu kimi görünür.
Bu axmaq az smiley face var.
Bu Mən zoomed etdik ki, kiçik bir şəkil var olduqca böyük mən hər görmək olar ki,
fərdi nöqtələr və ya piksel.
Biz təmsil edə bilər həyata İndi çevrilir sayı 0, demək, qara nöqtə.
Sayı 1 və ağ nöqtə.
>> Belə ki, başqa sözlə, əgər siz bir çəkmək Smiley face və bir resim saxlamaq
kompüter, o adet sıfır saxlamaq və kifayətdir bu kimi baxmaq ki, olanlar, harada,
yenə olanları ağ və adet sıfır qara.
Birlikdə, siz səmərəli varsa olanları və rəqəmlərdə sıfırların gird bir, bir var
piksel grid və siz lay əgər onları, bir cute var
az smiley face.
İndi bitmap fayl biçimi, BMP edir səmərəli ki, başlıq altında,
lakin daha çox piksel sot ilə ki, siz həqiqətən rəng təmsil edə bilər.
>> Amma daha təcrübəli zaman BMP və JPEG və GIF kimi fayl formatları
olan siz, həmin tanış ola bilər disk faylları adətən yalnız
adet sıfır və piksel üçün olanlar var, lakin onlar həmçinin bəzi metadata var -
həqiqətən deyil o mənada ki, meta data ancaq onu əldə etmək faydalıdır.
Belə ki, burada bu sahələr eyham edilir və biz P-set daha ətraflı görəcəksiniz
5 ki, adet sıfır və olanları əvvəl bir şəkil piksel təmsil
metadata bir dəstə kimi var Bu şəkil ölçüsü və
image eni.
Və mən bəzi off Yolma alıram qeyd burada özbaşına şeylər -
eni və hündürlüyü.
Bit sayı və bəzi başqa şeylər.
Belə ki, bir fayl bəzi metadata var.
>> Amma faylları qoydu necə anlaşılması ilə Bu şəkildə, həqiqətən bilərsiniz
sonra images manipulyasiya, şəkillər bərpa disk, şəkillər boyutlandır.
Amma mütləq bilməz onlara artırır.
Mən bir fotoşəkil lazımdır.
Mən sizə görən, burada RJ geri döndü çox bir müddət əvvəl ekranda.
Burada Əsas açmaq varsa, bu nə Yakınlaştırmak üçün cəhd olur və
RJ artırır.
O, həqiqətən hər hansı bir daha əldə deyil.
İndi Keynote bir blurring növü az, yalnız üzərində Gloss
RJ xüsusilə almaq deyil ki, fakt Daxil zoom, inkişaf etmiş
Və bu yolu əgər, meydanlarda görmək?
Bəli, siz mütləq bilərsiniz proyektor üzrə meydanlarda.
>> Bu, inkişaf zaman almaq budur.
Amma anlayışı necə RJ ya Smiley face həyata keçirilir bizə imkan verəcək
həqiqətən manipulates kodu yazmaq Bu şeylər.
Və Mən, mən bu qeyd-də başa istədiyiniz fikir Bir 55 saniyə, var artırmaq
Mən deyil, yanlış deyirəm, cəsarət.
>> [Video playback]
>> O, yalançı.
Nə haqqında, mən bilmirəm.
>> -Yaxşı biz nə bilirik?
>> -Yəni 9:15 Ray Santoya da ATM idi.
>> -Belə ki, sual budur o 9:16-da məşğul olub?
>> Atəş doqquz millimetr bir şey.
Bəlkə o snayper gördüm.
>> -Və ya onunla çalışır.
>> -Dur.
Bir geri.
>> -Nə görürsünüz?
>> , Tam ekran onun üz-gətirin.
>> -Onun camlar.
>> -Bir əks edir.
>> -Bu Neuvitas beysbol komanda var.
Onların logo var.
>> Və o var kim söhbət oldu ki, jaket qalıcı.
>> [END video playback]
>> DAVID J. Malan: Bu, Problem Set 5 ola bilər.
Biz gələn həftə görəcəksiniz.
>> MALE spikeri növbəti CS50 edir.
>> [Crickets cik-cik]
>> [Musiqi ifa]