我試圖寫C.陣列(2x20000)的測試的代碼是:數組聲明:C分段故障
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double test(int smod)
{
//
// test subroutine
//
double vect_fma[2][20000];
int i;
// write on file //
FILE *f = fopen("file.txt", "w");
///////////////////
for(i = 1; i < 20001; i = i + 1){
// allocate the vector for the fma analysis
vect_fma[1][i] = i*smod;
vect_fma[2][i] = i*smod;
if (i%smod == 0)
fprintf(f, "%f %f %f \n", 1.0*i, vect_fma[1][i],vect_fma[2][i]);
}
fclose(f);
return 0;
}
int smod;
void main()
{
smod = 10; // every 10 print the output
test(smod); // call the function
}
我與gcc test.c -lm -o test
編譯的代碼和我收到Segmentation fault (core dumped)
。
據我所知,「the compiler tries to store it on the stack」和解決方案可能是鏈接頁面中呈現的解決方案....但解決方案看起來很奇怪(並且理解複雜),如果與更簡單的fortran聲明數組real(8), dimension(n:m) :: vect_fma
,我可以放入一個子程序或一個沒有問題的函數中。 也許是我在代碼中寫的聲明與fortran real(8), dimension(n,m),allocatable :: vect_fma
類似?
所以問題是,它存在一個簡單的方法在C中聲明一個函數內的數組? 非常感謝大家。
可能對於堆棧太大 - 使用堆而不是 –
@EdHeal類似於'2d_array =(int *)malloc(sizeof(int)* N * M);'? –
編譯過程中(這是您的答案意味着什麼)或執行過程中是否收到分段錯誤? – CorbinMc