구조체를 동적 메모리 할당을 해서 free를 할경우 에러가 발생합니다. 아르켜 주세요~~
푸르나
아래 소스를 보시면 //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;
}
-
이솔
그렇다면 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 |