세그멘테이션 오류가 뜨는 이유를 모르겠어요..
글쓴이: facered79 / 작성시간: 금, 2005/08/05 - 10:34오전
#include <iostream> using namespace std; typedef struct { int slotNum; int boardType; int boardNum; int alarmType[10]; }RfmbRdabHwType; typedef struct { RfmbRdabHwType HwStatus[]; }alarmtest; int main() { alarmtest s; int i=0; for( i=0 ; i<10 ; i++) { s.HwStatus[i].slotNum=i+1; s.HwStatus[i].alarmType[0]=1111; s.HwStatus[i].alarmType[1]=1; s.HwStatus[i].alarmType[2]=1111; s.HwStatus[i].alarmType[3]=0; s.HwStatus[i].alarmType[4]=1111; } return 0; }
위와 같은 코드를 컴파일 하고 실행하면
오류가 뜹니다..
소스는 간단하고 오류가 발생할 이유가 없어보이는데요..
어디가 잘못된것인가요..
Forums:
Re: 세그멘테이션 오류가 뜨는 이유를 모르겠어요..
HWstatus가 구조체의 배열인데 동적배열이군요..
동적배열이라면 메모리가 할당이 되어 있지 않으니 메모리 오류가 생기는게 아닐까합니다.
를 하신 상태로 작성하시거나 동적 배열형태가 필요하다면 new를 이용한 메모리할당을 하신다음에 alarmtest를 사용하도록 변경을 하시기 바랍니다.
struct alarmtest 안의 HwStatus 에 충분한 메모리가
struct alarmtest 안의 HwStatus 에 충분한 메모리가 할당되어있지 않기 때문입니다.
와 같이 혹은,
과 같이 (malloc 도 좋구요) 메모리를 할당해주시면 될 것입니다.
훗, 못 믿겠나?
HwStatus[] 에 몇개의 값이 들어가게 될지 모를경우..
그럴 경우에는 변수의 메모리 할당을 어떤 식으로 해야 하나요..
Re: HwStatus[] 에 몇개의 값이 들어가게 될지 모를경우..
1) 위에 소개한 방법과 같이 하되, 그 한계를 넉넉히 준다.
2) 필요한 순간에 필요한 만큼씩 공간을 할당해 나간다.
1) 번의 경우, 그냥 쉽게 쉽게 짜내려갈 수 있는 장점이 있습니다. 만드시는 프로그램이 크게 중요하지 않거나 사용할 데이터의 양이 어느정도 제한적이고 또한 그 실행환경에 그럭저럭 넉넉한 메모리가 있다면 사용할 수 있겠죠.
2) 번의 경우는 말씀시는 것으로 봐서는 구현을 위한 공부와 시행착오가 필요하실것 같습니다만, 어쨌든 유연하게 대처할 수 있는 방식이므로 언젠가는 사용하셔야 할 것입니다. 함수로 보면 malloc(), realloc() 등에 대해서 찾아보시고 그보다 먼저 포인터, 배열에 대한 학습/이해가 필요하실 것 같습니다.
댓글 달기