수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

구조체를 동적 메모리 할당을 해서 free를 할경우 에러가 발생합니다. 아르켜 주세요~~

푸르나

2023.04.01

아래 소스를 보시면 //param1 = (param_t*)malloc(sizeof(param_t*));
구조체를 동적 메모리 할당을 했는데요. malloc을 사용했기 때문에 , free를 사용하는데
세그멘테이션 에러가 발생하네요. 책에는 반드시 malloc을 사용할 경우
free를 사용해야 한다고 해서 사요한건데요. 이거 왜그런지 잘 모르겠습니다.
고수분들의 조언과 답변을 부탁드릴게요~^^
=============================================================================================
=============================================================================================
#include stdio.h
#include glib.h
#include stdlib.h

//gcc `pkg-config --libs glib-2.0 --cflags glib-2.0` -g -o glist_exam3 glist_exam3.c

typedef struct _param_t{
char* name;
char* address;
}param_t;

param_t* param1;
param_t* param2;

GList* extern_list = NULL;
GList* extern_node = NULL;

void get_param(){
param1-name = get_name;
param1-address = get_address;

extern_list = g_list_append(extern_list , param1);
}

void put_param(){

extern_node = g_list_first(extern_list);
param2 = (param_t*)(extern_node-data);

printf(param2-name is %s\n , param2-name);
printf(param2-address is %s\n , param2-address);

//GList 메모리 해제해도 세그멘테이션 에러가 발생하네요. 왜 그럴까요?
//g_free(extern_list);
//g_free(extern_node);
}int main(){
char* data1 = aaa;
char* data2 = bbb;
char* data3 = ccc;

GList* list = NULL;

param1 = (param_t*)malloc(sizeof(param_t*));
param2 = (param_t*)malloc(sizeof(param_t*));

list = g_list_append(list , data1);
list = g_list_append(list , data2);
list = g_list_append(list , data3);

GList* node;
g_print(%d\n , g_list_length(list));
node = g_list_nth(list , 1);

g_print(%s\n , (char*)(node-data));

node = g_list_find(list , data3);
g_print(%s\n , (char*)(node-data));

get_param();
put_param();

//GList 메모리 해제해도 세그멘테이션 에러가 발생하네요. 왜 그럴까요?
//g_free(list);
//g_free(node);

//구조체를 동적 메모리 할당을 해서 free를 할경우 세그멘테이션 에러가 발생하네요. 왜그럴까요?
//free(param1);
//free(param2);
return 0;
}

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

  • 이솔

    그렇다면 glib에 g_list_append나 g_free같은게 있다는 말이군요.
    g_list_append할 때 넘겨준 문자열을 새로운 메모리에 복사해서 노드에 붙이는지 아니면 그 자체를 붙이는지 찾아보세요. 아마도 후자일 것 같은데.
    그렇다면 사용자가 직접 새로운 메모리를 할당받아서 거기에 문자열을 복사해준 것을 넘겨서 리스트에 추가하도록 해보세요.
    아마도 문자열 상수를 해제하려고 해서 오류가 난 것일 겁니다.

  • 희선

    수다님. 풀소스 인데요~

  • 누리알찬

    위 소스코드만으로는 다른 어떤 문제점도 발견할 수 없습니다.
    소스코드를 공개하기가 꺼려진다면 스스로 찾는 수 밖에는 없습니다.

  • 루나

    알려주셔서 감사합니다. 제가 메모리 할당할때 sizeof를 4바이트로 해버렸네요.
    해서 param1 = (param_t*)malloc(sizeof(param_t)); - 로 바꾸고 free(param1);을 수행했는데요.
    그래도 세그멘테이션 에러가 발생하네요. 고수분들의 답변을 부탁드리겠습니다.^^

번호 제 목 글쓴이 날짜
2697341 좌우대칭 문제인데 Q가 입력되면 종료가 되야하는데 되지않습니다 무지개 2025-06-07
2697314 fprintf와 fscanf 로 파일 입출력 할떄 밝음이 2025-06-06
2697293 툴 소스 뽑아내는법 도움 2025-06-06
2697264 소소한거 두어가지 질문할께요~ (8) 별솔 2025-06-06
2697235 scanf로 인풋 받을 때?! 보담 2025-06-06
2697207 열혈강의 연습문제 질문이요~ (2) 맥적다 2025-06-05
2697182 strcmp, strtok - 어떤 기능을 하는지... 루다 2025-06-05
2697129 [질문] 아래 저축액을 계산하는 프로그램 ㅠ 추가 질문 (7) 찬늘 2025-06-05
2697072 쌩초보 질문! (1) 얀 2025-06-04
2697050 도움부탁드립니다.. 화이트 2025-06-04
2697023 gotoxy함수, 어떻게 사용하죠? (3) 적송 2025-06-04
2696994 c언어를 막 시작한 초보인데 질문이 있어용 ㅠㅠ (2) 귀1여운렩 2025-06-03
2696944 윈도우 콘솔프로그램 질문드립니다 (2) 꽃님이 2025-06-03
2696882 c언어 입력받기 질문 입니다 (2) 흰추위 2025-06-02
2696853 문자열은 정적메모리에 할당된다고 하는데 정적메모리가 뭡니까?? (6) 다온 2025-06-02
2696799 c c++언어입문전에 파이톤이나 자바스크립트배워두면.. (2) 앨런 2025-06-02
2696747 size of 연산자에 대해 질문이 있습니다. (3) 유진공주 2025-06-01
2696721 Char 타입의 2D array 기초에 대해 질문드립니다. 벚꽃 2025-06-01
2696691 자릿수 이동방법좀 가르쳐주세요 (1) 흰추위 2025-06-01
2696664 학생정보 구조체 질문 큰아 2025-05-31
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com