|
发表于 2014-4-12 11:33:19
|
显示全部楼层
- #include <stdio.h>
- #include <stdlib.h>
- #define N 13
- struct LinkList
- {
- int n;
- LinkList *next;
- }*rear;
- void CreateChain()
- {
- LinkList *p=rear=(LinkList*)malloc(sizeof(LinkList));
- for (int i=1;i<=N;i++)
- {
- p->next=(LinkList*)malloc(sizeof(LinkList));
- p=p->next;
- p->n=i;
- }
- p->next=rear->next;
- rear->next=p;
- }
- int main()
- {
- CreateChain();
- LinkList *p1=rear->next,
- *p2; //删除指针时用
- int n;
- for (int i=1;i<=N;i++)
- {
- n=i;
- while (--n) // 指针走到该到的位置
- p1=p1->next;
- printf("黑桃%d放在第%d张\n",i,p1->next->n);
- p2=p1->next->next;
- //printf("删除了%d\n",p1->next->n);//测试是否正确删除结点
- /*free(p1->next); */
- //这里必须要注释掉。。因为你下面又用了free(rear)
- //如果不注释掉的话。。就会重复free了。。那么堆肯定要出错了
- p1->next=NULL;
- p1->next=p2;
- }
- free(rear);
- system("pause");
- return 0;
- }
复制代码 free(p1->next);把这个注释掉就不会堆报错了。。。 |
|