왜 세그멘테이션 오류가 날까요?
글쓴이: 익명 사용자 / 작성시간: 토, 2017/10/28 - 8:52오후
typedef struct
{
int mode;
void* value;
}TP;
typedef struct
{
int i;
int j;
}TV;
uint8_t T_alloc(unsigned long v_size, TP* p, void* v)
{
p = malloc(sizeof(TP));
v = malloc(v_size);
p->value = v;
}
void T_free(TP* p)
{
free(p->value);
free(p);
}
void main()
{
TP* p;
TV* v;
T_alloc(sizeof(TV), p, (void*) v);
T_free(v);
}
이게 전체의 소스입니다.
free(p->value);에서 오류가 나는데 이유를 모르겠네요.
어디서부터 잘못된걸까요?
Forums:
많이 잘못되었습니다..
하나하나 확인해보세요.
일단...
이 코드만 봐도 p와 v에는 어떠한 값도 들어가지 못합니다.
p와 v에 값을 저장하려는 목적인거 같은데
초기 p와 v에는 알 수 없는 값(초기화되지 않은 변수)이 들어가게 되고
그 "값"만이 T_alloc으로 전달 될 뿐입니다.
그 후에
uint8_t T_alloc(unsigned long v_size, TP* p, void* v)
함수를 실행하고 이 안에서 p와 v을 바꾼다 한들 T_alloc함수 안에서만 p와 v값이 바뀌고
main에서의 p와 v는 변하지 않습니다.
포인터의 개념부터 잡으셔야 할거 같습니다.
참고해보세요.
http://codepad.org/qf5KHERW
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기