segmentation fault 에러 도움 부탁드립니다.
글쓴이: armsci / 작성시간: 토, 2012/04/21 - 5:27오후
학교 과제로 5-body simulation을 짜는데, 컴파일 과정에서는 에러가 없는데 코드를 돌릴 때 segmentaion fault가 뜨네요. 어디에서 에러가 뜨는지 도와주셨으면 합니다.
#include <stdio.h> #include <math.h> #include <stdlib.h> #define GM 1 #define Tfin 1 double h=0.001; double x0[5][3]={{0,0,0},{0,1,2},{3,4,5},{4,5,2},{3,1,2}}; double v0[5][3]={{0,0,0},{2,-1,3},{3,4,2},{2,1,-2},{7,2,1}}; double **x,**v; double **a,angm[3]={0,0,0}; double t; int main(){ for(int i=0;i<5;i++){ x[i]=x0[i]; v[i]=v0[i]; } t=0; }
우선 이렇게까지 줄였는데 에러가 남아있네요.
Forums:
show me your (minial)
show me your (minial) complete code producing the error and how to reproduce it.
메모리 할당 오류...
메모리 할당이 안되어서 발생된 오류입니다.
즉, x[i]가 할당이 안된 상태에서 값을 쓰려고 해서 발생된 문제입니다.
for loop안에 보시면
x[i] = x0[i];
v[i] = v0[i];
로 되어 있는데 이때 x의 선언은
double **x;
입니다.
x[i]를 사용하려면 x는 "1차원의 5개의 크기를 가지는 double* 배열"이 미리 선언 또는 할당되어 있어야 합니다.(v도 마찬가지입니다.)
(즉,
x = (double*)malloc(sizeof(double**)*5);
가 for loop이전에 되어 있어야 합니다.)
설명을 어렵게 해는지 모르겠네용;;
쉽게 설명해서...
그냥 간단하게 설명하면, 할당안된 x변수를 사용하려 해서 문제인 겁니다^^;;;
위에 할당 방법의 예는 써놨으니... 패수
그러니까..
**x의 각 성분인 x[i]에 대한 메모리 할당이 이루어지지 않은 상태에서 참조하기 때문에 생긴 오류라는 건가요?
일일이 메모리를 할당시켜 수정해보겠습니다.
에... 그러니까...
포인터는 사실 초보자 입장에서는 꽤 까다로운 문제입니다.
익숙해지면 사실 어렵지 않은건데
답은 간단합니다.
x[i]를 사용하기 위해서 x변수에 메모리 할당이 안되어 있어서 그렇다가 정답니다.
즉, 다음의 코드를 for문전에 넣어주시면 됩니다.
x = (double*)malloc(sizeof(double**) * 5);
감사합니다.
댓글 달기