왜이 코드가 분할 오류를 반환하는지 이해할 수 없습니다. 아무도 나에게 잘못을 말하는 걸 도와 줄 수 있니?세그먼트 화 오류 11 - C
#include <stdio.h>
#include "rk78.h"
#include "flux.h"
#include "rtbps.h"
#define N 6
#define h0 0.1
#define pasmin 1E-6
#define pasmax 10
#define tol 1E-13
int rk78 (double *t, double x[], double *h,
double hmin, double hmax, double tol,
int n, int (*camp)(int n, double t, double x[], double f[], void *prm),
void *prm);
int flux (double *t, double x[], double *h, double T,
double pasmin, double pasmax, double tol, int npasmx,
int n,
int (*camp)(int n, double t, double x[], double f[], void *prm),
void *prm);
int rtbps (int n, double t, double *x, double *f, void *prm);
/*
Per compilar:
gcc -o rtbps_int -g -Wall rtbps_int.c rtbps.c flux.c rk78.c -lm
Executar:
./rtbps_int 1.215058560962404e-2 <halos_inp.txt> halos.txt
*/
int main (int argc, char *argv[]) {
double t,x[N],h,mu,T;
int i, nt;
if (argc!=2
|| sscanf(argv[1],"%lf",&mu)!=1
) {
fprintf(stderr, "./rtbps_int mu\n");
return -1;
}
/*
posició, velocitat, temps, iteracions
*/
printf("Ok");
while(scanf("%lf %lf %lf %lf %lf %lf %lf %d",
&x[0],&x[1], &x[2], &x[3],&x[4],&x[5],&T,&nt)==8){
printf("%lf %lf %lf %lf %lf %lf %lf\n", t,
x[0],x[1],x[2],x[3],x[4],x[5]);
h=h0;
t=0;
for(i=1;i<=nt;i++){
//t=0;
flux(&t,x,&h,T/nt,pasmin,pasmax,tol,nt,N,rtbps,&mu);
printf("%lf %lf %lf %lf %lf %lf %lf\n", t,
x[0],x[1],x[2],x[3],x[4],x[5]);
}
}
return 0;
}
맨 위에 내가 사용하는 기능의 프로토 타입을 복사했지만 작동하므로 문제가되지 않습니다.
감사합니다. 라인에서
seg 오류 발생 후 무엇을 했습니까? 전혀 디버깅? 올바른 일은 디버거를 사용하여 다른 사람들에게 당신을 위해 디버깅을 요청하기 전에 가능한 한 문제를 디버깅하는 것입니다. 디버거는 어느 라인이 seg fault를 유발하고 있는지를 즉시 알려줍니다. – kaylum
'& x [1]'등을 쓰고 있는데, 생각하지 않아도됩니다. '& (x [1])'을 사용해야합니다. 그렇지 않으면 당신은'(& x) [1]'을 얻습니다. 이것은 정의되지 않습니다. – Aganju
@Aganju :'[]'는'&'보다 우선 순위가 높으므로'& x [0]'은 실제로'x [0]'의 주소로 평가됩니다. –