2014-10-03 119 views
-2

我是新手C程序員。我試圖通過一次分配內存500kb來測試malloc函數的限制,直到malloc返回null。我嘗試了幾件事,但沒有任何工作。有人會幫我修復我的代碼,以便它能夠滿足我的需求嗎?另外,我應該如何打印出最後一個內存地址?這是我目前有:如何編寫while循環,在while循環中通過malloc分配500kb內存

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

int main() 
{ 
    int *p; 
    int tf = 1; 
    while(tf==1) 
    { 
     p=(int*) malloc(500*4); 
     if(p == NULL) 
     { 
      tf = 0; 
     } 
    } 
} 
+0

「但沒有什麼工作。」 - 這不是問題。 – 2014-10-03 04:05:45

+1

你知道500是正確的字節.... – Steve 2014-10-03 04:05:50

+1

你有什麼錯誤/警告? btw什麼是'torf'? – chouaib 2014-10-03 04:05:59

回答

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

int main() 
{ 
    int *p; 
    int counter = 0; 
    while(p != NULL) 
    { 
     p=(int*) malloc(500*1000); 
     counter++; 
    } 

    printf("%d\n", counter/2);//mem size in MB 
    printf("%p\n", p);//address 
    return 0; 
} 

試試這個,而不是

+0

你能幫我打印出最後一個地址,並分配了多少內存總量嗎? – anonymous 2014-10-03 04:26:48

+0

@anonymous done – Steve 2014-10-03 04:30:45

+0

我得到大量的編譯器errors.It不承認:「cout 「,」end1「或」end「 – anonymous 2014-10-03 04:34:45

0

這裏有一些錯誤,根據您的方法描述。

首先,這是一次分配500字節,而不是500千字節。其次,沒有辦法擺脫while循環。所以,即使在malloc開始返回null之後,你也會永遠在那裏轉動。

最後,它甚至不應該編譯,更不用說運行了,因爲torf沒有在任何地方聲明。

你在正確的軌道上,但我真的懷疑你真的設法建立。

+0

我修復了我的代碼。它編譯。但是,我最終陷入了無限循環。我會改變內存問題,並將其更改爲500kb。 – anonymous 2014-10-03 04:10:03

+0

「我真的懷疑你真的設法建立這個」? (Jerk。這是我第一個星期學習C. – anonymous 2014-10-03 04:21:59

+1

嘿,你說你試過了,但沒有奏效,試着去理解「編譯失敗」和「不按預期工作」之間的區別。我會知道這個錯誤發生的位置很重要 – jee7s 2014-10-03 04:23:09