2012-11-06 27 views
6

'u uygulama modülümüzün birinde döndürür, calloc() başarısız ve NULL döndürüyor. Tahsis etmeye çalıştığı bellek miktarı, 9292 baytlık bir yapıdır. İşletim sistemi AIX 7.1 ve çalışan VIOS 2.2.1.3.calloc başarısız olur ve NULL

Makinede 2 + GB ram var ve bellek yetersizliği ile ilgili bir sorun yok gibi görünüyor. Aynı uygulama modülü, sorunlu kutuyla aynı konfigürasyonlara sahip olan diğer kutulardan birinde iyi çalışıyor. İzleme, her iki kutudan gelen bir bellek pasajıdır ve aynıdır!

ÇALIŞMA KUTU:

 
RLIMIT_AS  (infinite) (infinite) 
RLIMIT_CORE 1073741312 (infinite) 
RLIMIT_CPU  (infinite) (infinite) 
RLIMIT_DATA  134217728 (infinite) 
RLIMIT_FSIZE (infinite) (infinite) 
RLIMIT_NOFILE  2000 (infinite) 
RLIMIT_RSS  33554432 (infinite) 
RLIMIT_STACK  33554432 2147483646 

SORUNLU KUTU:

 
RLIMIT_AS  (infinite) (infinite) 
RLIMIT_CORE 1073741312 (infinite) 
RLIMIT_CPU  (infinite) (infinite) 
RLIMIT_DATA  134217728 (infinite) 
RLIMIT_FSIZE (infinite) (infinite) 
RLIMIT_NOFILE  2000 (infinite) 
RLIMIT_RSS  33554432 (infinite) 
RLIMIT_STACK  33554432 2147483646 

Gerçekten (neden calloc çözemiyorum olarak clueless değilim) bu kutuyu 9292 bayt için bile başarısız oluyor.

Teşekkür

+0

Belki de bellek parçalanması? Tahsise uyacak kadar büyük bir blok yok mu? Atama başarısız olduğunda, örn. Ne yazdığını görmek için "errno"? –

+0

Evet Aynısını düşünüyordum, ama ispatlamak ya da somut olarak bilmenin bir yolu var mı? ENOMEM hata numarası! Truss çıkışı bu hatayı gösteriyor! süreci kirişin bir pasajı, bu lseek göstermektedir (3, 0, 1) \t \t \t \t \t = 4318 lseek (3, 0, 1) \t \t \t \t \t = 4318 lseek (3, 0, 1) \t \t \t \t \t = 4318 lseek (3, 242, 0) \t \t \t \t = 242 kread (3, "\ t M Inorg V ersio" .., 4096) \t = 4096 lseek (3, 0, 1 \t \t= 4338 lseek (3, 222, 0) \t \t \t \t = 222 __libc_sbrk (0X00000000) \t \t \t \t hata 12. ENOMEM __libc_sbrk (0X00000000) \t \t \t \t hata 12. ENOMEM __libc_sbrk (0x00000000 223.210 \t \t) \t \t \t \t hata 12. ENOMEM __libc_sbrk (0x00000000) \t \t \t \t hata 12. ENOMEM __l ibc_sbrk (0x00000000) \t \t \t \t Err # 12 ENOMEM – k2ibegin

+0

Bize 'calloc' çağrısı ve sonucunu kontrol eden kod da dahil olmak üzere kodu gösterin. –

cevap

1

deneyin calloc (1, sizeof (ifp_handle_t)); calloc yerine (sizeof (ifp_handle_t), 1); Belki yanılıyor olabilirim ama parametreleri tersine çevirmişsiniz gibi görünüyor.

+0

Makineniz tek bayt doldurmadıkça bir fark yaratmamalısınız ... ama haklısınız, calloc (nmemb, boyut) '. – DevSolar

+0

mmm .. Bunun bir fark yarattığını düşünmüyorum, çünkü ben de malloc ile denedim ve bu da başarısız oluyor. Ayrıca, aynı kod uzun bir süre için çalışıyor, sadece müşteri yeni bir bölüm oluşturduğunda ve AIX 6.1 VIOS bölümünü 2.2.1.3'e yükselttiğinde. Düşük bir sayfa alanı olduğundan şüpheleniyorum veya AIX'e özgü olabilecek bazı geç/erken ayırma ile ilgili şeyler olabilir. – k2ibegin