Я пытаюсь написать массив (2x20000) на C. тестовый код:Объявление массива: 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)
.
Насколько я знаком с C, я понимаю, что «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