(c语言)free函数释放环形链表出错,求教
程序是通过一个环形链表来加密字符串的,程序本身运行正常,但是运行到free的时候,在第二次free时出错(第一次应该是正常通过了)。
内存都是通过calloc申请的所以我觉得很奇怪。
以下为代码:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
struct Link
{
char i;
Link *next;
int check;
};
Link *initRLink(int wordnum)
{
Link *Linkage;
int i;
Linkage = (Link *)calloc(wordnum, sizeof(Link));
for (i = 0; i <= (wordnum - 2); i++)
Linkage[i].next = &Linkage[i + 1];
Linkage[wordnum - 1].next = &Linkage[0];
for (i = 0; i <= (wordnum - 1); i++)
Linkage[i].check = 0;
return Linkage;
}
Link *encrypt(int code, char *list, int wordnum)
{
Link *Linkage, *head;
int i, j, k = 0;
Linkage = initRLink(wordnum);
head = Linkage;
for (i = 1; i <= wordnum; i++)
{
for (j = 1; j <= ((i == 1) ? (code - 1) : code); j++)
{
Linkage = Linkage->next;
if (Linkage->check == 1)
j--;
}
Linkage->i = list[k];
Linkage->check = 1;
k++;
}
return head;
}
void outLink(Link *Linkage, int wordnum)
{
int i;
for (i = 0; i <= (wordnum - 2); i++)
{
printf("%c", Linkage->i);
Linkage = Linkage->next;
}
printf("%c", Linkage->i);
}
void freeLink(Link *Linkage, int wordnum)
{
int i;
Link *temp;
temp = Linkage;
for (i = 1; i <= (wordnum - 1); i++)
{
temp = Linkage;
Linkage = Linkage->next;//这里运行第二次的时候出错
free(temp);
}
free(Linkage);
}
int main()
{
char inp[100];
int code, wordnum;
Link *fp;
printf("请输入原文字符串:\n");
gets(inp);
printf("请输入整数加密钥匙:\n");
scanf("%d", &code);
//这个code不能越界
printf("密文字符串为:\n");
wordnum = strlen(inp);
fp = encrypt(code, inp, wordnum);
outLink(fp, wordnum);
freeLink(fp, wordnum);
return 0;
}