zoukankan      html  css  js  c++  java
  • 内存的重新分配

    #define __STDC_WANT_LIB_EXTl__ 1
    #include <stdio.h>
    #include <stdlib.h>
    typedef enum {false=0,true=1}bool;
    unsigned long long *pPrimes =NULL;
    unsigned long long limit =0LL;
    
    bool found =false;
    int count=0;
    int i;
    
    size_t capacity =10;
    #define CAP_INCR 9
    
    unsigned long long trial;
    unsigned long long *pTemp;
    //把定义都他妈放前面,省的报错,赋值可以以后在弄,定义一定要现在!!!
    
    
    int main(void)
    {
        
        printf("Enter the upper limit for primes.............");
        scanf_s("%LLU",&limit);
        //输入unsigned是一种很长的数据类型%llu是他的形式。这里LLU大小写无所谓。
        
    
        pPrimes=calloc(capacity,sizeof(unsigned long long ));
    
        //pPrimes是一个指针,calloc初始化分配内存.数量为capacity,每个大小为sizeof(...)
        
        if(!pPrimes)
        {
            printf("Not enough ,memory....");
            
            return 1;
        }
        
        //检验分配的内存空不空,如果pPrimes==0  那么!(pPrimes)=true 
    
        *pPrimes=2ULL;
        *(pPrimes + 1)=3ULL;
        *(pPrimes +2 )=5ULL;
        //pPrimes 就是启始地址 pPrimes+1表示下一个元素地址
    
        count = 3;
        trial=*(pPrimes +2)+2ULL;//就是7ULL
    
        pTemp=NULL;
        
        while (trial<=limit)
        {
            for (i=1;i<count;i++)//遍历之前质数
            {
                if(!(found=(trial%*(pPrimes+i))))//如果发现可以整除某个之前的质数.也就是这个数不是我们要的质数。
                    break;
            }
        
        
            if (found)//与上面相反,是质数
            {
                if(count==capacity)//capacity是我们给的上限,只有10个,假如count到达10个后,内存就不够用了,这时候重新分配内存
                {
                    capacity += CAP_INCR;//再来9个单位的空间!
    
                    pTemp=realloc(pPrimes,capacity*sizeof(unsigned long long ));//重新分配
    
                    if(!pTemp)//检验分配是否成功
                    {
                        printf("Unfortunately memory reallocation failed.
    ");
                        free(pPrimes);
                        pPrimes=NULL;
                        return 2;        
                    }
                
                    pPrimes=pTemp;//还给他
                
                }
                    *(pPrimes+count++)=trial;//把这个数储存到pPrimes分配的内存里,并且是下一个空间
            
            }
                    trial +=2ULL;//进入下一个奇数
        }
        
        
        
        printf("%d primes found up to %llu 
    ",count,limit);
    
        for (i=0;i<count;++i)
        {
            printf("%12lld",*(pPrimes + i));
            if(!(i+1)%5)
                printf("
    ");
        
        }//五个一行的打印
        
        printf("
    ");
    
        free(pPrimes);
        pPrimes=NULL;
    
        system("pause");
        return 0;
        
        
        
        
        
        
        
        
        
        
    }
  • 相关阅读:
    N层电梯只停一层情况下,求所有人爬楼层数最少
    小组开发用户调研
    《哈利波特》买书最优惠算法
    团队开发——极速蜗牛
    林锐——软件工程思想后两章阅读笔记
    课堂练习之检测水军
    团队开发项目-----来用------典型用户与用户场景分析
    体验结对开发的乐趣(6)--(电梯调度问题)
    团队开发项目-----来用------用户需求调研报告
    课堂练习之最高折扣,最低优惠规划
  • 原文地址:https://www.cnblogs.com/xinqidian/p/5580964.html
Copyright © 2011-2022 走看看