Linked list 에서 메모리 에러가 뜹니다 도와주세요!!!!!
글쓴이: jalhaja63 / 작성시간: 월, 2015/10/26 - 10:31오후
코드는 아래와 같습니다.
개발환경: 비주얼 스튜디오. 언어: C언어
typedef int element; typedef struct ListNode{ element pro_index; struct ListNode *link; unsigned int pageNum; // 페이지 번호 int rameNum; // 프레임 번호 time_t time; // 해당 프로세스에 해당하는 페이지가 할당될떄의 시간 }ListNode; ListNode *phead = NULL; // 노드 생성 ListNode* create_node(element pro_index, pTable_t table, ListNode *link) { ListNode *new_node; new_node = (ListNode*)malloc(sizeof(ListNode)); //new_node->pTable = (ListNode::pTable *)malloc(sizeof(ListNode::pTable)); if(new_node == NULL) fputs("메모리 할당 에러", stderr); new_node->pro_index = pro_index; new_node->link = link; new_node->pageNum = table.pageNum; new_node->frameNum = table.frameNum; new_node->time = table.time; return (new_node); } // 노드 추가 void insert_node(ListNode **phead, ListNode *prev, ListNode *new_node) { if(*phead == NULL){ new_node->link = NULL; *phead = new_node; }else if( prev == NULL){ new_node->link = *phead; *phead = new_node; }else{ new_node->link = prev->link; prev->link = new_node; } } // 노드 삭제 void remove_node(ListNode **phead, ListNode *prev, ListNode *removed) { if(prev == NULL) *phead = removed->link; else prev->link = removed->link; free(removed); } // 해당 process index에 해당하는 노드 탐색 후 삭제 void search_Delete(ListNode *head, int pro_index) { ListNode *p = head; ListNode *prev = head; int check=0; while( p != NULL){ if(p->pro_index == pro_index){ while(prev != NULL){ if(prev->link == p){ check = TRUE; break; }else prev = prev->link; } if(check == 0) prev = NULL; } remove_node(&phead, prev, p); p = p->link; } }
////////////
노드 생성, 추가되는 다 잘됩니다.
하지만 이상하게 search_Delete(ListNode *head, int pro_index) 함수에서 계속
ListNode *p = head; ListNode *prev = head; 이 두분에서 <메모리를 읽을수 없음> 이라고 에러 메시지가 뜹니다.
오늘 하루 종일 붙잡고 있는데도 도저히 모르겠네요.
에러 메시지 스샷 찍어서 첨부 파일로 올려놨으니 꼭 봐주셨으면 감사하겠습니다...
에러를 어떻게 고쳐야 할지 정말 모르겠습니다.
고수님들 제발좀 도와주세요 ㅠㅠ....
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 54.29 KB |
Forums:
저는 컴파일도 안되네요. ㅇ_ㅇ;;
//
ListNode *phead = NULL;
전역변수와 함수 인자값에 이름이 똑같습니다.
//
link 가 0x00000 일때. 조건문으로 접근을 막아야 합니다.
//
printf();로 코드에 흐름과 값을 확인해보실 수 있습니다.
확인해주세요.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기