返回数组c函数

时间:2014-02-13 10:22:02

标签: c arrays

我有多维数组

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",则效果很好。

  • 如何在main中返回此5维数组的值?
  • 或者还有另一种方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:4)

10 * 3 * 12 * 519 * 11 * sizeof(double)可能是16441920字节,可能大于可用的堆栈空间。

您可以将数组设为全局或动态分配。

另请注意,数组不会通过值传递给函数,只传递其地址, 所以你似乎没有想到“返回数组”的问题。

PS。至于动态分配,在你的情况下你可以这样做:

double (*coeff)[3][12][519][11];
coeff = calloc (1, 10 * sizeof (*coeff));

并且不要忘记free它。