Arama butonu
Bu konudaki kullanıcılar: 1 misafir
8
Cevap
1161
Tıklama
0
Öne Çıkarma
C pointer sorunu
S
11 yıl
Binbaşı
Konu Sahibi

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;
}

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



K
11 yıl
Çavuş

neden *(p+i) kullandın ki ?


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Sofiman
S
11 yıl
Binbaşı
Konu Sahibi

ö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.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @kayakoku
K
11 yıl
Çavuş

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.



M
11 yıl
Çavuş

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;
}



Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Sofiman
S
11 yıl
Binbaşı
Konu Sahibi

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?


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @MLoveR
M
11 yıl
Çavuş

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.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Sofiman
S
11 yıl
Binbaşı
Konu Sahibi

return 0; dan önce free(p) yapıp kullanılan alanı geri iade ediyoruz sanırım ?


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @MLoveR
M
11 yıl
Çavuş

Evet.




Bu mesajda bahsedilenler: @Sofiman
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.