(c语言)free函数释放环形链表出错,求教

jiyixiu jiyixiu 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
程序是通过一个环形链表来加密字符串的,程序本身运行正常,但是运行到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;
}
...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
jiyixiu
新手乐园 33,315 成员 41,769 内容