J'essaie de faire cette calculatrice intégrale dans la méthode de Simpson en programmation C, mais elle sort avec une erreur: erreur de segmentation (core dumped). J'ai googlé des choses à ce sujet et essayé le débogueur gdb, mais je n'ai rien obtenu.C programmin: Défaut de segmentation (core dumped)
revendications gdb: Programme reçu signal SIGSEGV, erreur de segmentation. 0x00000000004008f6 dans main()
Je ne suis pas un programmeur expert, je ne comprends pas sur les pointeurs et des trucs de ce genre.
Que signifie cette erreur? Comment puis-je le réparer? Que faut-il faire attention pour que je puisse l'empêcher de se produire/trouver l'erreur?
Merci à l'avance (:
#include<stdio.h>
#include<math.h>
double inta,suma; //value of the integral and a provisory value for it
int a; //a sort of boolean
double expo(double x) //the function to be integrated
{
return exp(-0.5 * pow(x,2));
}
double integration(double min, double max, int division) //the process of integration
{
double step = (max - min)/(pow(2,division)); //define the number of steps
double fake_a;
fake_a = min; //a value thats equal to the minimum
int counter; // to count how many times the steps have been taken
counter = 1;
while(fake_a < max)
{
fake_a = fake_a + counter*step; //the first value of a
if(counter % 2 == 0) //even
{
suma = suma + 2*expo(fake_a);
counter++;
}
else //odd
{
suma = suma + 4*expo(fake_a);
counter++;
}
}
inta = suma + expo(min) + expo(max); //final value of the integral
counter = 1; //reset counter
return inta;
}
int main()
{
int N; //N of columns of matrix_inte
double matrix_inte[N][2]; //a matrix for the evaluating the integrals
a = 0; //boolean
double acc = pow(10,-6); //accuracy
N = 2; //length of the integral vector
int n_div; //number of divisions
double mn = -1.0;
double mx = 1.0;
n_div = 10;
//first values of the matrix
matrix_inte[1][1] = 0;
matrix_inte[2][1]= 1;
matrix_inte[1][2] = 0;
while(a=0) //main loop
{
for(int i=2;i<=N;i=i+1) //takes the differences of a vector[i] and vecotr[i-1]
{
double result;
result = fabs(matrix_inte[i][1]-matrix_inte[i-1][1]);
matrix_inte[i][2] = result;
}
for(int j = 1;j <= N; j = j + 1)
{
if(matrix_inte[j][2] > acc) //checks if there is any value greater than acc
{
n_div = n_div + 10;
N = N + 1;
inta = 0;
suma = 0; //readjusts the variables
integration(mn,mx,n_div);
matrix_inte[N][1] = inta; //recalculate the integral
}
else
{
printf("%f ", matrix_inte[j][1]); //shows the value of the integral
a = 1; //changes the boolean
}
}
}
return 0;
}
Cela vous dérange de créer un [___MCVE___] (http://stackoverflow.com/help/mcve)? –
Le débogueur vous dira facilement où l'accident se produit. C'est peut-être là que vous accédez au troisième élément d'un tableau de 2 éléments, même avant la boucle. – chris
... et aussi 'N' n'est pas initialisé lorsque vous utilisez' double matrix_inte [N] [2]; '. –