#include <stdio.h>
#include <malloc.h>
typedef struct node
{
int data;
struct node *next;
}LNode, *LinkList;
void destroyLinkList(LinkList *list)
{
LinkList p, r;
p = *list;
while(p)
{
r = p->next;
free(p);
p = r;
}
*list = NULL;
}
void main()
{
LinkList current, prior, deleteNode, headList = NULL;
int elem;
int count = 0;
printf("請輸入整數:\n");
scanf("%d", &elem);
while(count < 10 || elem != 0)
{
current = (LinkList)malloc(sizeof(LNode));
current->data = elem;
current->next = NULL;
if(!headList)
headList = current;
else
prior->next = current;
prior = current;
count++;
scanf("%d", &elem);
}
prior = headList;
printf("鏈表中的值爲:\n");
while(prior)
{
printf("%d ", prior->data);
prior = prior->next;
}
printf("\n");
prior = headList;
for(count = 0; count < 3; count++)
{
prior = prior->next;
}
deleteNode = prior->next;
prior->next = deleteNode->next;
free(deleteNode);
prior = headList;
printf("刪除第五個結點後的鏈表中的值爲:\n");
while(prior)
{
printf("%d ", prior->data);
prior = prior->next;
}
printf("\n");
destroyLinkList(&headList);
printf("銷燬鏈表\n");
}
這個程序寫完之後,一碰到free();就崩潰,讓我一直以爲這裏不能用free;然後查到下面這個知識點:
char *p = (char *)malloc(10);就會產生分配10個字節。如果你把指針的地址改變了p = p + 1;然後free就要出問題,程序會崩潰。
以爲自己犯了上面這個錯誤呢,我想了想我是一個一個malloc的,並沒有範上面的錯誤,後來才發現我在創建鏈表時,current = (LinkList)malloc(sizeof(int));分配了個int型,應該分配那個結點的,current = (LinkList)malloc(sizeof(LNode));