程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> malloc-程序運行到某個過程停止?

malloc-程序運行到某個過程停止?

編輯:編程解疑
程序運行到某個過程停止?

代碼如下:

#include"stdlib.h"
#include"malloc.h"
int *add(int *a,int *b)
{
    int digit1=_msize(a)/4;
    int digit2=_msize(b)/4;
    int digit=_msize(a)/4>=_msize(b)/4?_msize(a)/4:_msize(b)/4;
    printf("enter:a=");
    for(int i=0;i<digit1;i++)
        printf("%d",a[i]);
    printf(" b=");
    for(int i=0;i<digit2;i++)
        printf("%d",b[i]);
    int *re=(int *)calloc(digit+1,4);
    int *d=(int *)calloc(digit+1,4);
    int *e=(int *)calloc(digit1,4);
    for(int i=0;i<digit2;i++)
        e[i]=b[i];
    for(int i=0;i<digit;i++)
    {
        d[i+1]=(a[i]+e[i])/10;
        re[i]=(a[i]+e[i]+d[i])%10;
    }
    re[digit]=d[digit];
    free(d);
    free(e);
    if(re[digit]==0)
    {
        realloc(re,digit*4);
        printf(" out: ");
        for(int i=0;i<digit;i++)
            printf("%d",re[i]);
        printf("\n");
        return re;
    }
    else 
    {
        printf(" out:");
        for(int i=0;i<digit+1;i++)
            printf("%d",re[i]);
        printf("\n");
        return re;
    }
}
void main()
{
    int *fr=(int *)malloc(sizeof(int));
    fr[0]=1;
    int *af=(int *)malloc(sizeof(int));
    af[0]=1;
    while(true)
    {
        int *temp=fr;
        fr=af;
        af=add(af,temp);
        if(_msize(af)/4==1000)
        {
            for(int j=0;j<(_msize(af)/4);j++)
            printf("%d",af[j]);
            break;
        }
    }
}

任務是找出首個達到1000位的斐波那契數。
數太大,不可能直接操作,我用數組來表示數,方便起見我將數倒著存入數組。
但是呢我運行了幾次,前面都沒問題,運行到814491和393021(對應數為194481和1210393)就卡住不動了~求問怎麼回事呢?

最佳回答:


 #include"stdio.h"
#include"stdlib.h"
#include"malloc.h"
#include"string.h"

void Add(char a[],char b[],char d[])
{
    char c[1200];
    int lena=strlen(a),lenb=strlen(b);
    int i,len;
    len=lena>lenb?lena:lenb;
    len++;
    c[0]='\0';
    for(i=1;i<=len;i++)c[i]='0';
    for(i=1;i<=lena;i++)c[i]+=a[lena-i]-48;
    for(i=1;i<=lenb;i++)c[i]+=b[lenb-i]-48;
    for(i=0;i<=len;i++)
        if(c[i]>57)
    {
            c[i]-=10;
            c[i+1]++;
        }

    for(i=len;i>1;i--)
        if(c[i]==48)len--;
        else break;
     for(i=0;i<=len;i++)
        d[i]=c[len-i];
}

void main()
{
    char a[1200];
    char b[1200];
    char c[1200];
    a[0] = '1';
    a[1] = '\0';
    b[0] = '1';
    b[1] = '\0';
    int i = 3;
    while (true)
    {
        Add(a, b, c);
        if (strlen(c) >= 1000) break;
        i++;
        strcpy(a, b);
        strcpy(b, c);
    }
    printf("%d\n", i);
    printf("%s\n", c);
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved