回 帖 发 新 帖 刷新版面

主题:奇数幻方求解?

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

有哪位热心的朋友帮我看一下面的程序哪里出错了?,我用动态二维数组,为什么运算不出结果呀?用静态的就可以得出结果??......大侠们帮帮忙.....在这先谢谢了!
vod main()
{
    int m,mm,i,j,k,ni,nj;
    int **a;

    printf("输入奇数幻方大小:\n");
    scanf("%d",&m);

    if(m<=0||m%2==0)
    {
        printf("输入错误!\n");
        exit(0);
    }
    //分配动态二维数组
    a=(int**)malloc(m*sizeof(int*));
    for(i=0;i<m;i++)
        a[i]=(int*)malloc(m*sizeof(int));

    mm=m*m;
    i=0;
    j=m/2;
    for(k=1;k<=mm;k++)
    {
        *(a[i]+j)=k;
        if(i==0)
            ni=m-1;
        else
            ni=i-1;
        if(j==m-1)
            nj=0;
        else
            nj=j+1;
        if(*(a[ni]+nj)==0)
        {
            i=ni;
            j=nj;

        }
        else
            i++;

    }

    for(i=0;i<m;i++)
    {
        for(j=0;j<m;j++)
            printf("%03d    ",*(a[i]+j));
        printf("\n");
    }
    //释放内存
    for(i=0;i<m;i++)
        free(a[i]);
    free(a);[/size][/size]

回复列表 (共1个回复)

沙发

越界了。你申请空间时是a[3][3],实际使用时出现了a[3][],当然要出错啦

我来回复

您尚未登录,请登录后再回复。点此登录或注册