.
.
.
struct record{
set<int> num;
char code;
};
void func1(record * rc)
{
int i;
for(i=0;i<5;i++)
rc[i].num.insert(i);
}
.
.
.
int main()
{
struct record rc;
func1(&rc);
.
.
.
이런 구조인 코드인데
저걸 돌리면
rc[1].num.insert(1);
이걸 할 때 세그멘테이션 오류(core dumped)이거 뜨는거같거든?
어떻게 하면 이 포맷을 유지하면서 저 셋에 정보를 입력할 수 있을까?
너 뭐하냐...?
ㄴ저게 지금 만들고있는 코드는 아니구요 제가 안되는 부분만 따로 만든건데 구조체 안의 set을 접근하고 싶은데 그 구조체가 구조체 배열로 딱 선언이 된게 아니라 포인터로만 넘겨서 해야되거든요 ㅠㅠ 근데 저렇게 값을 입력하려고 하면 실행할 때 오류가 뜨네요..
set을안써봐서 뭔진모르겟는데 배열같이 인덱스접근이면 저게아니라 rc.num[]이 되야되는거아니냐?
아니오 음 그러니까.. 구조체 안의 셋이 아니라 그냥 set을 이용하면 set<int> num; 이런식으로 메인함수에 선언하잖아요? 그러면 어떤 값을 넣을때는 걍 num.insert(값); 이런식으로 들어가요. 셋이 배열개념이 아니라 이진 트리에요 그래서 insert하면 알아서 넣어줍니다
당연히 안 되겠지 배열도 아닌데 배열처럼 엉뚱한 주소를 호출하고 있으니
근데 구조체를 배열처럼 사용하는건 다른 데에는 아무문제가 없었어요 구조체 변수가 set이 아닌 경우에는
for(i=0;i<max;i++){rc[i].code='a';} 이런 식의 코드가 아무 문제가 없었어요
어차피 rc[i].code나 (rc+i)->code나 똑같잖아요
저 코드대로라면 struct record rc[5]; 이렇게 쓰라고. 이해가 안 가냐? 구조체 정의도 안 됐는데 쓰고 있잖아.
아뇨 그렇게 선언안해도 다른 멤버변수에 접근하는데 전혀 문제가 없어요 그건 그냥 구조체와 포인터의 관계를 잘 만 이용하면 되는 문제인데...
rc의 개수가 변하는 건 상관없는것같아요 문제는 저 set안의 원소의 개수가 변하는것같습니다
프로그램 돌아가기만 하면 전부 아무 문제 없다고 생각하냐? rc[i].code='a'; 이건 단지 메모리상에 기록되도 오류날 부분이 없어서 동작한 거다. 답정너 할 거면 질문 글은 왜 쓰냐?
어.. 그러니까 struct record rc[5]; 해도 똑같다는 거죠
똑같은게 아니라 아예 &rc;로 넘어가질 않네요 이 과제의 틀이 저 구조체변수의 선언부분과 함수의 인자는 건드리면 안되어서..
그럼 문제가 잘못 된거지. 교수랑 조교가 내는 문제는 전부 아무 문제가 없다고 생각하냐? rc[5]하고 &rc;하면 이중포인터를 넘기잖아. func1(rc);를 해야지. 야 너는 프로그래밍 소질이 없는 거 같다. 빨리 때려치고 장사나해라 진심으로.
아니 애초에 set 쓸 거면서 func1에서 for 돌리는 이유가 뭔지 모르겠네