segmentation fault 에러 도움 부탁드립니다.

armsci의 이미지

학교 과제로 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;
 
}

우선 이렇게까지 줄였는데 에러가 남아있네요.
익명 사용자의 이미지


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);

감사합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.