在我們的應用程序的模塊之一,calloc()失敗並返回NULL。它試圖分配的內存量是9292字節的結構。操作系統是AIX 7.1並運行VIOS 2.2.1.3。calloc失敗並返回NULL
該機器有2 + GB RAM,似乎沒有內存不足的問題。相同的應用程序模塊在其他一個盒子上運行良好,它與有問題的盒子具有相同的配置。以下是兩個盒子的內存片段,它們是相同的!
週轉箱:
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
疑難BOX:
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
我一無所知無法真正弄清楚爲什麼釋放calloc()甚至沒有關於此框9292個字節。
由於
也許內存碎片?沒有足夠大的空閒塊以適應您的分配?分配失敗時,您是否檢查過'errno'看看它說什麼? –
是的,我在想同樣的事情,但有沒有辦法來證明或具體知道它?錯誤號ENOMEM!桁架輸出顯示此錯誤!從上所述的過程桁架一個片段顯示了本lseek的(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, 「\ Tm值INOR V ersio」 ..,4096)\t = 4096 lseek的(3,0,1 )\t \t \t \t \t = 4338 lseek的(3,222,0)\t \t \t \t = 222 __libc_sbrk(00000000)\t \t \t \t ERR#12 ENOMEM __libc_sbrk(00000000)\t \t \t \t ERR#12 ENOMEM __libc_sbrk(00000000 )\t \t \t \t ERR#12 ENOMEM __libc_sbrk(00000000)\t \t \t \t ERR#12 ENOMEM __L ibc_sbrk(0x00000000)\t \t \t \t Err#12 ENOMEM – k2ibegin
向我們展示代碼,包括對calloc的調用和檢查其結果的代碼。 –