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",°);
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
?任何想法都非常感謝!
使用你的調試器,它應該有幫助 – ForceBru
當你使用這樣的二維數組時,第二維必須在調用者和被調用者中匹配。在調用者中,你聲明第二個維度爲「deg + 2」。但在'create_basis'函數中,第二個維度是'MAX'。 –
謝謝!如果你不介意,爲什麼只有第二維必須匹配? – gdavtor