我有多维数组
double coeff[10][3][12][519][11];
我在另一个函数的include文件(#include "call_of_functions.h"
)中设置了这个数组的值:
#include <stdio.h>
void func_T5_D1(double s, double t, double mt, double coeff[10][3][12][519][11])
{
#include "call_of_functions.h"
}
我在main.c中调用了这个函数
int main(){
double s, t, mt;
double coeff[10][3][12][519][11]={0};
double ex;
printf("enter 3 values for s, t and mt:\n");
scanf("%lf %lf %lf", &s, &t, &mt);
printf("%lf %lf %lf\n", s, t, mt);
func_T5_D1( s, t, mt, coeff);
ex = coeff[5][1][10][309][10];
printf("%.14e \n",ex);
return 0;
}
但是我遇到了分段错误。如果我在main.c中包含#include "call_of_functions.h"
,则效果很好。
答案 0 :(得分:4)
10 * 3 * 12 * 519 * 11 * sizeof(double)可能是16441920字节,可能大于可用的堆栈空间。
您可以将数组设为全局或动态分配。
另请注意,数组不会通过值传递给函数,只传递其地址, 所以你似乎没有想到“返回数组”的问题。
PS。至于动态分配,在你的情况下你可以这样做:
double (*coeff)[3][12][519][11];
coeff = calloc (1, 10 * sizeof (*coeff));
并且不要忘记free
它。