구조체 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
개체가 만들어지지 않았습니다. 포인터만 있을 뿐이죠.보물지도만 있고 보물은 어디에도 없는 격입니다.
======
개인적으로 질문자가 왜 이 코드가 동작할 거라고 기대하는지 그 이유가 전혀 짐작되지 않습니다.
그 이유가 대충이라도 추측이 되어야 왜 그게 잘못된 생각인지 논할 수 있을 텐데요.
포인터 변수는 주소값만 저장할 수 있어요!
포인터 변수는 주소값을 저장하는 변수이지 값을 저장하지 않아요~ 값을 참조만 할 뿐입니다
댓글 달기