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
댓글 달기