我正在编写一个简单的程序,它采用双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",°);
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
?非常感谢任何想法!
答案 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是 二维数组不必匹配。