2015-07-19 84 views
0

我正在寫一個簡單的程序,採取雙alpha和整數deg打印create_basis計算矩陣mat。下面是代碼:函數返回2d陣列 - 中止陷阱6

#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; 
} 

然而,當我跑,似乎有一個問題,當我在main稱之爲create_basis,因爲它給了abort trap 6錯誤,這我相信意味着我試圖訪問內存我沒有。然而,mat的尺寸似乎與我試圖訪問的內容一致。我錯誤地打電話create_basis?任何想法都非常感謝!

+0

使用你的調試器,它應該有幫助 – ForceBru

+2

當你使用這樣的二維數組時,第二維必須在調用者和被調用者中匹配。在調用者中,你聲明第二個維度爲「deg + 2」。但在'create_basis'函數中,第二個維度是'MAX'。 –

+0

謝謝!如果你不介意,爲什麼只有第二維必須匹配? – gdavtor

回答

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是 二維數組沒有相匹配。