Kolay C Programlama Dersleri 17 - malloc ve free fonksiyonları (Bellek'ten Alan Alma)

  Рет қаралды 22,495

Bilal Enes Fedar

Bilal Enes Fedar

Күн бұрын

Пікірлер: 16
@jelfens
@jelfens 5 жыл бұрын
Helal olsun ne zamandır aradığım bilgiyi burda buldum eline sağlık.
@ertugrulhaykr2731
@ertugrulhaykr2731 2 жыл бұрын
sayenizde bu kısmı çok iyi kavradım ve uygulayıp anlayarak yaptım ellerinize sağlık çok teşekkür ederim
@orion6831
@orion6831 3 жыл бұрын
anlatım güzel olmuş için teşekkürler!
@muhammeddikal8551
@muhammeddikal8551 4 жыл бұрын
Güzel anlatım. Teşekkürler
@Emreoguzboyu1882
@Emreoguzboyu1882 4 жыл бұрын
Cok kaliteli anlatim....
@12563469412
@12563469412 4 жыл бұрын
Kaç yıllık programlamacılardan daha iyi anlatıyorsun.
@veyselolgun7280
@veyselolgun7280 6 жыл бұрын
Merhaba, 3. dakikada yaptığınız tanımlama derleyicimde çalışıyor fakat bu tanımlamayı tam olarak anlayamadım ptr değişkeni bir pointer olduğu halde içerisine adres değişkeni koymak yerine 10 değerini koydunuz şöyle olması gerekmez miydi ; *(ptr)=10; *(ptr+1)=400;
@ahmetpehlivan3698
@ahmetpehlivan3698 4 жыл бұрын
Sorunun cevabını çoktan öğrenmişsindir ama bilmeyenler olur yazayım yine de; 7. satırda pointer'ın(*ptr) içine 40 int'lik değer atıyoruz yani ptr dediğimiz değer ptr[40]'a yani bir array oluyor. Senin yazdığın şekilde de komut çalışır *(ptr) ile ptr[0], *(ptr+1) ile ptr[1] aynı şey.
@mrarcticaaa1101
@mrarcticaaa1101 8 жыл бұрын
malloc kullanmak yerine array'i tanımlamadan önce kaç sayılık array istediğini scanf'le kullanıcıdan alsak, daha sonra array'i o değerle tanımlasak olmaz mı? ... int a; printf("Araligi giriniz: "); scanf("%d",&a); int dizi[a]; .... gibi
@BilalEnesFedar
@BilalEnesFedar 8 жыл бұрын
Bu soruyu ilk başlarda (malloc'u eziyet olarak gördüğüm zamanlar) ben de kendime sormuştum :) Cevaba gelirsek, hem evet hem hayır. C dili ilk yayınlandığı halde kalmayıp, standart güncellemeler getirildiği için C89, C90, ISO C99, C11 gibi farklı versiyonları var. Yazdığın kod C99, C11 versiyonlarında çalışırken, C89 ve C90 gibi eski versiyonlarda çalışmamakta. Bu da yazdığın kodun kalitesini düşürür. Mesela yukarıdaki kod Dev C++ ile derlenebilirken, Visual Studio ile derlenmeyip hata veriyor. Ders için ödev yollayacaksın diyelim, ödevini kontrol eden hoca C89, C90 ile derleme yaparsa hatalı ve derlenmeyen bir ödev yazmış olacaksın (kendi bilgisayarında çalışsa bile) . Özetle, yazdığın programı herkesin derleyebilmesini ve her platformda çalışabilmesini istiyorsan, boyutu bilinmeyen bir diziyi, ne yazik ki dinamik olarak tanımlamak zorundasın :)
@mrarcticaaa1101
@mrarcticaaa1101 8 жыл бұрын
Bilal Enes Fedar teşekkür ederim
@celalaltn5087
@celalaltn5087 2 жыл бұрын
Bir başka nedeni de dinamik kod yazmak. Örnek vermek gerekirse 40 byte lık alan ayırdık.Kullanıcı daha sonra bu koda yeni veri eklemek istediğinde her seferinde koda girip 40 byte lık alanı artıramaz.(Market otomasyonu gibi düşünün sürekli yeni ürünler eklenir.).Bir sayaç ekleyerek bunu çözebiliriz. Sayaç arttıkça (girilen veri arttıkça) hafızadan alınan alanı kolay biçimde artırabiliriz.(Arada 5 sene var siz cevabını öğrenmişsinizdir, kafasına takılan başka birisi varsa diye cevaplamak istedim🙂)
@BloodyPand
@BloodyPand 4 жыл бұрын
Eğer Dizi çok 2 boyutlu ise napıcaz yardımcı olurmusunuz Bir string dizisini kullanmanız gerektiğinde, 2 boyutlu bir char matrisi kullanmalısınız, Örneğin “char names [100] [30]”. Bu kullanım, en fazla 100 adınız olduğu, her birinde en fazla 29 karakter (artı \0 karakteri için 1 karakter) olduğu anlamına gelir. Programınız yalnızca 30 tane isim kullanıyorsa, 70 isim için ayrılan alan kullanılmaz. Bazı isimler 10 karakter, bazıları 15 karakter olabilir. Bu nedenle, isimler için ayrılan alanın bir kısmı daha kullanılmayacaktır ve gereksiz yere alan kaybı oluşacaktır. Bu soruna çözüm olarak dinamik bellek ayırma (dynamic memory allocation) kullanmaktır. Klavyeden N tane isim okuyan ve bunları dinamik olarak ayrılmış bir matrise yerleştiren bir program yazınız. Yalnızca N tane isim için yer ayırmanız gerekir. Her isim için minimum alan ayırmanız gerekir. Örneğin, isimlerden biri “Bilgisayar” ise, bunun için 10 + 1 = 11 bayt ayırmanız gerekir. İpucu: İsimler için bir çift işaretçi tanımlayın (char ** names;) ve malloc fonksiyonunu kullanın.
@muhammedenesgokdeniz6201
@muhammedenesgokdeniz6201 3 жыл бұрын
Büyüksün hocam
@serden8804
@serden8804 6 жыл бұрын
hacıya şukular şelale adaaaaaaaaaaaaaaam
@volkanalkan3569
@volkanalkan3569 3 жыл бұрын
ADAM
SoruCevap 26 Ekim 2015 - Dinamik Hafıza (Dynamic Memory)
16:17
BilgisayarKavramlari
Рет қаралды 46 М.
Support each other🤝
00:31
ISSEI / いっせい
Рет қаралды 81 МЛН
UFC 310 : Рахмонов VS Мачадо Гэрри
05:00
Setanta Sports UFC
Рет қаралды 1,2 МЛН
C Ders 42 Struct / 1
8:01
Murat Yücedağ
Рет қаралды 41 М.
Kolay C Alıştırma - Yıldızlarla Şekil Oluşturma
18:39
Bilal Enes Fedar
Рет қаралды 121 М.
void Tipi Nedir? Ne işe yarar?
4:57
BilgisayarKavramlari
Рет қаралды 35 М.
C Programlama #10.3 (Dinamik Hafıza Yönetimi)
14:37
Uzaktan Akademi
Рет қаралды 8 М.
Mühendislik Öğrencileri İçin C Final Soruları | Yazılım Bilimi
37:53
C Ders 44 Typdef Kullanımı
7:17
Murat Yücedağ
Рет қаралды 25 М.
C Programlama malloc / calloc / realloc / free kullanımı
5:59
C++ Dosya İşlemleri
20:30
Samet Karakurt
Рет қаралды 7 М.
C Programlama Dersleri 30 - Pointerlara Giriş ve Pointerların Mantığı
14:20