구조체 segmentation fault
글쓴이: ljs0626jh / 작성시간: 일, 2022/04/17 - 11:59오후
#include<stdio.h>
#define x 10
struct data{
int num;
int state;
};
struct queue{
struct data* q1[x];
int num;
};
struct queue *q;
void insert(struct queue *q, struct data* d){
d->state = 0;
q->q1[0] = d;
q->num = 1;
}
int main(){
struct data *d;
insert(q,d);
printf("%d\n %d\n", q->q1[0]->state, q->num );
}이런 식으로 작성했는데 segmentation fault 에러가 떴습니다.
검색해보니까 메모리 참조를 잘못했다고 하는데
어느 부분이 잘못되었고 어떤 식으로 고쳐야 맞는지 알고 싶습니다.
Forums:


struct proc *p;
struct proc *p;
에서 p는 아직 실제로 메모리에 할당되어 있지 않습니다.
struct proc p; 등으로 하세요.
죄송합니다. 코드 수정했습니다.
제가 코드를 잘못 작성했습니다.
struct proc *p 가 아니라 struct data* d; 입니다.
이렇게 바꿔도 여전히 오류가 뜨는데 이유를 잘 모르겠습니다.
혹시 시간 되신다면 다시 한 번만 봐주실 수 있을까요?
struct data *d = malloc
struct data *d = malloc(sizeof(struct data));
...
free(d); -- main 마지막에.
구조체 struct data의 필드를 수정하려면,
구조체
struct data의 필드를 수정하려면, 당연히struct data개체가 있어야 합니다.코드 전체에 걸쳐 어디에서도
struct data개체가 만들어지지 않았습니다. 포인터만 있을 뿐이죠.보물지도만 있고 보물은 어디에도 없는 격입니다.
======
개인적으로 질문자가 왜 이 코드가 동작할 거라고 기대하는지 그 이유가 전혀 짐작되지 않습니다.
그 이유가 대충이라도 추측이 되어야 왜 그게 잘못된 생각인지 논할 수 있을 텐데요.
포인터 변수는 주소값만 저장할 수 있어요!
포인터 변수는 주소값을 저장하는 변수이지 값을 저장하지 않아요~ 값을 참조만 할 뿐입니다
댓글 달기