Ich versuche, ein Array (2x20000) auf C. Der Testcode zu schreiben ist:Array-Deklaration: C Segmentation fault
#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
}
ich den Code mit gcc test.c -lm -o test
zusammengestellt und ich erhielt Segmentation fault (core dumped)
.
Soweit ich neu auf C bin, verstehe ich, dass "the compiler tries to store it on the stack" und eine Lösung könnte die in der verknüpften Seite vorgestellt werden .... aber diese Lösung sieht ziemlich komisch (und komplex zu verstehen) im Vergleich mit Einfachere Fortran-Deklaration des Arrays real(8), dimension(n:m) :: vect_fma
, die ich in ein Unterprogramm oder in einer Funktion ohne Probleme einfügen kann. Ist vielleicht die Erklärung, die ich in den Code geschrieben habe, ähnlich der Fortran real(8), dimension(n,m),allocatable :: vect_fma
man?
Die Frage ist also, gibt es einen einfacheren Weg in C ein Array innerhalb einer Funktion zu deklarieren? Vielen Dank an alle.
Wahrscheinlich zu groß für den Stack - verwenden Sie stattdessen den Heap –
@EdHeal so etwas wie '2d_array = (int *) malloc (sizeof (int) * N * M);'? –
Haben Sie den Segmentierungsfehler während der Kompilierung (was Ihre Antwort impliziert) oder während der Ausführung erhalten? – CorbinMc