|
3鱼币
调试的显示是:
心好累啊.exe 中的 0x0115173b 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefef2 时发生访问冲突
指向出问题的地方:
int length_list (NODE * pHead)
{
int len = 0;
NODE * p = pHead->pNext;
while (p != NULL)
{
len++;
printf("%d",len);
p = p->pNext; //这里显示有问题
}
printf("%d",len);
return len;
}
但是为什么会这样啊?
下附整个程序:(用动态链表实现报数报到3踢出局)
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
//函数声明
struct NODE1
{
int data;
struct NODE1 * pNext;
};
typedef struct NODE1 NODE;
//typedef struct NODE1 * PNODE;
NODE * creat_list();
int length_list (NODE * pHead);
void delete_list(NODE * pHead, NODE * p);
int main()
{
NODE * pHead = creat_list();
int count = 0;
NODE * p = pHead;
while (length_list(pHead)>1)
{
p = p->pNext;
++ count;
if (count == 3 && p != NULL)
{
delete_list (pHead, p);
count = 0;
}
if (p == NULL)
{
p = pHead;
}
}
printf ("剩余的人的编号是:%d", pHead->pNext->data);
while (1);
return 0 ;
}
NODE * creat_list()
{
NODE * pHead = (NODE * )malloc(sizeof(NODE));
int len, data, i;
NODE * pTail;
printf("一共多少人玩(请输入人数):\n");
scanf_s ("%d", &len);
if (pHead == NULL)
{
printf ("分配内存失败,程序结束!");
exit(-1);
}
pHead->pNext = NULL;
pTail = pHead;
for (i=0; i<len; i++)
{
NODE * pNew = (NODE * )malloc(sizeof(NODE));
if (pNew == NULL)
{
printf ("分配内存失败,程序结束!");
exit(-1);
}
pNew->pNext = NULL;
pNew->data = i+1;
printf("%d",pNew->data);
pTail->pNext = pNew;
pTail = pNew;
}
printf("\n%d",pHead->pNext->data);
return pHead;
}
int length_list (NODE * pHead)
{
int len = 0;
NODE * p = pHead->pNext;
while (p != NULL)
{
len++;
printf("%d",len);
p = p->pNext;
}
printf("%d",len);
return len;
}
void delete_list(NODE * pHead, NODE * p)
{
//if (pHead->pNext == NULL)
// return false;
NODE * pTag = pHead->pNext; NODE * pFore = pHead;
while (pTag != p)
{
pFore = pTag;
pTag = pTag->pNext;
}
if (p->pNext != NULL)
{
pTag->pNext = p->pNext;
}
else pTag->pNext = NULL;
free (p);
p = NULL;
//return true;
} |
|