|
发表于 2021-8-22 01:39:42
|
显示全部楼层
本楼为最佳答案
本帖最后由 人造人 于 2021-8-22 01:40 编辑
- 第 22 行,count 和 size[i] 都是 int 类型,(count - 1) * size[i] 的结果也是 int 类型
- 当 count 是 2808 的时候溢出了,max 成了负数
复制代码
- #include<stdio.h>
- #include<stdlib.h>
- int main(void)
- {
- long long max=0;
- char* ptr=NULL;
- /*下面把int换成long long就可以出结果,为什么,求解答,感激不尽*/
- //long long size[]={1024*1024,1024,1}; //从大到小依次寻找范围
- int size[]={1024*1024,1024,1}; //从大到小依次寻找范围
- for(int i=0;i<3;i++)
- {
- for(int count=1;;count++)
- {
- size_t s = max + size[i] * count;
- printf("s: %u, count: %d\n", s, count);
- ptr=(char*)malloc(s);
- //ptr=(char*)malloc(max+size[i]*count);
- if(ptr==NULL)
- {
- //max+=(count-1)*size[i];
- max+=(long long)(count-1)*size[i];
- printf("max: %lld, count: %d\n", max, count);
- break;
- }
- free(ptr);
- }
- }
- //printf("最多可以申请%.2lfGB",max*1.0/(1024*1023*1024));
- printf("最多可以申请%.2lfGB\n",max*1.0/(1024*1024*1024));
- }
复制代码 |
|