2014-10-03 153 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