Tam Sürümünü Görmek İçin : malloc null döndürüyor!
Darkstar
04/11/2004, 21:53
Selamlar herkese,
aşağıdaki kod satırında ilk defa karşıma çıkan birşey oldu.
char **etk;
etk = (char**)malloc((SSayisi+1)*sizeof(char*));
C++ için yazdığım programımda, C'de önceden yazılmış bir kütüphanenin malloc fonksiyonunda (yukardaki satırda) böyle bir hata verdi. Sisteme baktım, memory'de birsürü boş yer var ama hata vermeye devam ediyor. Neden kaynaklanıyor olabilir, daha önce karşılaşan varmı bu tür ilginç bir problemle?
acehreli
04/11/2004, 22:03
malloc istegi yerine getiremedigi zaman NULL dondurur. (Yani normal bir davranis... :) )
SSayisi'nin degeri nedir?
Bellekte yer oldugunu nasil anliyorsun? Tam malloc'un cagrildigi zaman yer olmasi onemlidir. (Aslinda Linux, yer olup olmadigina bakmadan NULL disinda bir deger dondurur ama o ayri konu...)
Programda bellek kaybi var mi? Program calisir calismaz butun bellegi tuketiyor olabilir.
Ali
Darkstar
04/11/2004, 23:45
İşletim sistemi solaris. Belleğin null olup olmadığını ise sistem bus error verdiği anda free memory'ye bakarak anlıyorum. Sanırım sorun başka bir yerden kaynaklanıyor ama burada patlıyor.
SSayisinin değeri hep makul bir seviyede 10'u geçmiyor.
acehreli
05/11/2004, 02:05
Daha once program yigitini (stack) bozmus olabilirsin. Ornegin yerel bir dizinin disina yazmis olabilirsin. Bazen malloc ve free'deki hatalarin nedeni budur.
valgrind Solaris'te calisiyor mu? valgrind bu tur hatalari hemen gosterir.
Ali
Darkstar
05/11/2004, 23:11
valgrind'i bilmiyorum da purify varmış bu tür şeyleri gösteren ama o bizim sistemde yok henüz. Bu arada Solaris'te bir library keşfettim, C++'da Garbage Collection yapıyor. Süper birşey, sizin free ve delete yapmanıza gerek kalmıyor, alet kendi hallediyor. Ayrıca memory leakları çözüyor. Ama ne kadar CPU ve RAM kullandığını bilmiyorum. Yani sistemi ne kadar etkiler henüz belirsiz.
Bellekte yer olsa dahi malloc ile sanırım 64K veri ayırabiliyorsunuz, bunun nedeni malloc un küçük verilerle çalışmak için tasarlanması ve sınırlandırılması . Ben de bu sorunu aşmaya çalışıyorum şu an ama malesef bir çözüm bulamadım. Bilen varsa söylesin.
acehreli
09/05/2007, 20:45
yeminer, o soylediklerin malloc'un belirli bir gerceklestirmesi icin dogru olabilir. Yoksa malloc'un taniminda kucuk verilerle calismak gibi bir kisitlama yoktur.
Acaba programda bir hata mi var; veya o ortamin bir kisitlamasi mi...
Ali
Forum Yazılımı : vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.