세그멘테이션 오류(해결)
글쓴이: win3240 / 작성시간: 화, 2008/11/25 - 12:42오전
#include <iostream> #include <fstream> #include <string> #include <cstdlib> #include <glut.h> #include <gl.h> #include <glu.h> using namespace std; GLfloat MyVertices[8][3] ; GLfloat MyColors[8][3] = { {0.2,0.2,0.2}, {1.0, 0.0, 0.0}, {1.0, 1.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}, {1.0, 0.0, 1.0}, {1.0, 1.0, 1.0}, {0.0, 1.0, 1.0} } ; GLubyte MyVertexList[24] = { 0,3,2,1,2,3,7,6,0,4,7,3,1,2,6,5,4,5,6,7,0,1,5,4 }; int k ,v , i, b, y,j ; void Mydisplay(){ float size[1000][4]; ifstream fin("test1.dat"); //fin.seek_dir(30,ios_base::beg); for (v = 0 ; v < 9 ; v++) { for (y =0 ; y<4; y++) { fin >> size[v][y]; } } fin.close(); for (b = 0; b < 9; b++) { for (j = 0; j<3; j++) { MyVertices[b][j] =0 ; } } for (b = 0; b < 9; b++) { for (j = 0; j<3; j++) { MyVertices[b][j] = size[b][j+1] ; } } glClear(GL_COLOR_BUFFER_BIT); glFrontFace(GL_CCW); glEnable(GL_CULL_FACE); glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_VERTEX_ARRAY); glColorPointer(3, GL_FLOAT, 0, MyColors); glVertexPointer(3, GL_FLOAT, 0, MyVertices); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glRotatef(30.0, 1.0, 1.0, 1.0); for(GLint i=0; i<6; i++) glDrawElements(GL_POLYGON, 4, GL_UNSIGNED_BYTE, &MyVertexList[4*i]); glFlush(); } double main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB); glutInitWindowSize(500, 500); glutInitWindowPosition(0,0); glutCreateWindow("OpenGL"); glClearColor(0, 0, 0, 0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); glutDisplayFunc(Mydisplay); glutMainLoop(); return 0; }
페도라 9.0에서
gcc -o aa Text1.cpp -I /usr/include/GL/ -shared
컴파일 시켜더니.. aa 라는 파일이 만들어졌고..
./aa를 실행하니
세그멘테이션 오류라고 하네요..
무엇이 잘못되었을까요?
고수님들 부탁 드립니다..3일째 삽질 중입니다..T.T
Forums:
win3240님의 소스가
win3240님의 소스가 제대로 실행되는지 않되는지 테스트는 해보지 않았습니다.
하지만... 죄송한 말씀인데...
C언어에 대한 책이나 기초라도 제대로 하고 다시 시도해보셨으면 하는 바램입니다.
어느정도 이해하신후에 다시 질문해주셨으면 하는 바램이네요.
당장 생기는 문제에 대해 여기서 아무리 대답을 얻어간다 한들 큰발전은 없을꺼 같아 드리는 말입니다.
헤더파일이...
헤더파일이 안보여서..오해 하신것 같네요..
위의 소스 코드는 제가 직접 짜서 실행 결과 에러가 없었습니다.
혹시나 해서 윈도우에서 컴파일 했을 때에는 아무런 문제가 없이 잘 동작 되었습니다.
헤더파일이 없다면..아이에 컴파일이 되지 않겠죠?
위의 소스 코드를 다시 헤더가 보이도록 수정하겠습니다.
이곳에 질문을 안해봤던 터라 실수가 있었습니다.
죄송합니다.
코드를 올리실때는 <
코드를 올리실때는 < c o d e > < / c o d e > 블럭 안에 넣어주세요 - 스페이스는 빼고 입력하세요
---------------------------------------------------------------------------------------------------------
이 댓글(comment)의 수정 및 삭제를 위해 이 글에 답글(reply)를 달지말고 원 글에 댓글(comment)로 달아주세요
-------------------------------------------------------------------------------
이 댓글(comment)의 수정 및 삭제를 위해 이 글에 답글(reply)을 쓰지 말아 주십시요.
의견이 있으시면 원 글에 댓글(comment)로 써 주세요.
아하...
소스코드를 잘 안올려봐서요...감사합니다.
일단 보이는 부분은
일단 보이는 부분은 index 접근이 잘못된 것 같네요.
array[8] 이면 0~7까지 index로 접근해야 하겠죠.
잘 이해를 못해서...
잘 이해를 못해서 그런데..
배열 부분을 지적 하신 거라면..
어떤 배열 부분인지...
정확히...지적을 해주시면 안될까요?
모든 줄에 printf 문구
모든 줄에 printf 문구 하나씩 넣어서 어디서 문제가 나는지부터 알아보세요.
printf 를 넣어서 확인 해봤는데...
그냥 바로 세그멘테이션 오류라는 문구만 나오네요//
T.T
.
.
-------------------------------------------------------------------------------
이 댓글(comment)의 수정 및 삭제를 위해 이 글에 답글(reply)을 쓰지 말아 주십시요.
의견이 있으시면 원 글에 댓글(comment)로 써 주세요.
흠... 일단 컴파일부터..
흠... 기초적인 문제가 있습니다.
작성하신 코드에 main이 double을 리턴하도록 되어있는데 이부분은 int로 바꾸셔야 할 겁니다.
그리고 gcc에 -shared 옵션은 shared library를 작성하는데 필요한 옵션입니다.
컴파일해서 나온 파일을 실행시켰을때 죽는건 당연합니다.
코드를 보니 GL하고 glut를 사용하시는거 같은데 -lGL -lglut 뭐 이정도 추가하면 되겠군요.
ㅎㅎ
옵션 문제였군요..ㅎㅎㅎ
제가 가지고 있던 소스는 int로 바꾸어서 가지고 있었어요..ㅎㅎ
제가 아직 gcc옵션에 서툴렀던거 같습니다.
감사합니다.
댓글 달기