函数返回2d阵列 - 中止陷阱6

时间:2015-07-19 13:09:49

标签: c function

我正在编写一个简单的程序,它采用双alpha和整数deg打印由mat计算的矩阵create_basis。以下是代码:

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

#define MAX 30

void create_basis(uint64_t mat[][MAX],double alpha, int deg);

void create_basis(uint64_t mat[][MAX],double alpha,int deg){

    int i;
    int j;

    for(i=0;i<deg+1;i++){
        for(j=0;j<deg+2;j++)
            mat[i][j]=0;        
    }

    for(i=0;i<deg+1;i++){
        mat[i][deg+1]=floor(pow(alpha,i)*pow(10,16));
        mat[i][i]=1;
    }
}

int main(){
    int deg;
    double alpha;
    int i;
    int j;

    printf("Enter number:\n");
    scanf("%lf",&alpha);
    printf("Enter degree:\n");
    scanf("%d",&deg);

    uint64_t mat[deg+1][deg+2];
    create_basis(mat,alpha,deg);

    printf("Matrix basis=\n\n");
    for(i=0;i<deg+1;i++){
        for(j=0;j<deg+2;j++){
            if(j==0)
                printf("[%llu ",mat[i][j]);
            if(j==deg+1)
                printf("%llu]",mat[i][j]);
            else
                printf("%llu ",mat[i][j]);
        }
        printf("\n");
    }

    return 0;
}

然而,当我跑步时,我在create_basis中拨打main时似乎存在问题,因为它发出了abort trap 6错误,我认为这意味着我{&#39}我试图访问我没有的记忆。但是,mat的维度似乎与我尝试访问的内容一致。我是否错误地拨打了create_basis?非常感谢任何想法!

1 个答案:

答案 0 :(得分:1)

void create_basis(uint64_t mat[][MAX],double alpha,int deg){
 改为
void create_basis(int deg, uint64_t mat[deg+1][deg+2],double alpha){

正如已经解释过的原因@SteveSummit是 二维数组不必匹配。