Şimdi Ara

C pointer sorunu

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
9
Cevap
0
Favori
1.078
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • arkadaşlar kod aşağıdaki şekildedir. şu hatayı alıyorum

    'p' may be used uninitialized in this function -wmaybe-uninitialized. var mıdır çözümünü bilen. Yada kodda bir sıkıntı mı var bilemedim ki.

    #include <stdio.h> 
    #include <stdlib.h>
    #include <string.h>

    int main()
    {
    int *p;
    for(int i=0; i<10; ++i) {
    *(p+i)=rand();
    printf("%d\n", *(p+i));
    }
    return 0;
    }



  • Sofiman kullanıcısına yanıt
    neden *(p+i) kullandın ki ?
  • kayakoku K kullanıcısına yanıt
    özel bir sebebi yok. sadece pointer mantığını anlamak için yazmıştım. Aynısını diziylede yapabilirim biliyorum evet ama pointerla yapmak istemiştim.
  • quote:

    Orijinalden alıntı: Sofiman

    özel bir sebebi yok. sadece pointer mantığını anlamak için yazmıştım. Aynısını diziylede yapabilirim biliyorum evet ama pointerla yapmak istemiştim.

    pointer aritmetiğinde örneğin p+1 denildiği zaman compiler memoride bir interger boyutu kadar ilerideki ardesi göstermeye başlar. sıkıntı burada oluşuyor. pointer
    için ( ilk satırda yazdığın kod sebebiyle ) sadece bir integerlık yer almasına rağmen p+1 ile sahip olmağın yere değer atamaya çalışıyor.
  • Sofiman kullanıcısına yanıt
    Pointer kullanmışsın, ama bellekte yer tahsisi yapmamışsın. :)

    malloc() fonksiyonu kullanılmalı.

    #include <stdio.h> 
    #include <stdlib.h>
    #include <string.h>


    int main()
    {
    int *p;
    p = (int*)malloc(sizeof(int));

    for(int i=0; i<10; ++i) {
    *(p+i)=rand();
    printf("%d\n", *(p+i));
    }
    return 0;
    }

  • MLoveR kullanıcısına yanıt
    koda eklediğiniz satırda bellekten ne kadar yer tahsis ediyorsunuz? ben malloc() fonksiyonunu genelde p=(int *)malloc(.....*sizeof(int)) şeklinde kullanılıyor diye biliyordumda. noktalı kısmada bir sayı geliyordu. Yani bu vakte kadar ben böyle gördüm.

    Sizin denediğiniz gibi yaptım ve sorunu çözdüm evet, sağolun ama dediğim gibi, ne kadar yer tahsis ediyoruz öyle yazınca?
  • Sofiman kullanıcısına yanıt
    Dediğin şekilde de yani o kısma sayı gelecek şekilde de yapılabilir. Bu şekilde yapıldığında yani benim yazdığım gibi yapıldığında memory'den gereksiz yer işgali yapmış olabiliyoruz.

    Senin örneğinde 10 adet rakam alındığı için random olarak, malloc kısmında o rakamın gelebileceği yere 10 yazabiliriz. 10 adet sayı için bellek tahsisi yapıyor. int = 4 byte. 10 sayı diye belirttiğimizde 40 byte'lık yer tahsis etmiş oluyoruz bu şekilde. Öbür türlü daha fazla bir işgal söz konusu olabilir. :)

    Bir de benden sana ödev olsun. Bu kodda kullanmamışız gerçi.

    free(); fonksiyonunun kullanımına bak. Nerelerde neden kullanırız diye.

    Hadi kolay gelsin.
  • MLoveR kullanıcısına yanıt
    return 0; dan önce free(p) yapıp kullanılan alanı geri iade ediyoruz sanırım ?
  • Sofiman kullanıcısına yanıt
    Evet.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.