c - 链表:试图改变节点的索引
问题描述
void changeIndex(FrameNode **head, int numOfFrames)
{
int frameIndex = 0, i = 0;
char name[STR_LEN];
FrameNode* curr = *head;
FrameNode* prev = NULL;
FrameNode* nodeToChange = NULL;
printf("Enter the name of the frame:\n");
fgets(name, STR_LEN, stdin);
name[strcspn(name, "\n")] = 0;
while (!(searchFrame(head, numOfFrames, name)))
{
printf("Name is not exist in the list\n Please enter another name:");
fgets(name, STR_LEN, stdin);
name[strcspn(name, "\n")] = 0;
}
printf("Enter the index of the frame:\n");
scanf("%d", &frameIndex);
while (frameIndex > numOfFrames || frameIndex < 0)
{
printf("Name is not exist in the list\n Please enter another name:");
scanf("%d", &frameIndex);
}
getchar();
while (curr != NULL && i < numOfFrames)
{
if (strcmp(name, curr->frame->name) == 0)
{
nodeToChange = createFrame(head, numOfFrames, curr->frame->path, curr->frame->duration, curr->frame->name);
numOfFrames++;
numOfFrames = deleteFrame(head, numOfFrames, curr->frame->name);
}
curr = curr->next;
i++;
}
curr = *head;
i = 0;
if (*head != NULL)
{
while (i != frameIndex && curr->next != NULL)
{
prev = curr;
curr = curr->next;
i++;
}
prev->next = nodeToChange;
nodeToChange->next = curr;
}
else
{
*head = nodeToChange;
}
}
在这里,我试图通过名称更改节点的索引。我有一个内部有结构的节点。它给我一个错误,说prev = NULL
即使我在第 4 次初始化它(正确的值设置在 中nodeToChange
)。
所以我的问题是为什么会发生这种情况以及您如何建议我解决它?
解决方案
对于 while 循环的值, i= 0
然后frameindex=0
条件失败,那么 thenprev
已经是null
并且您将要访问prev->next
会引发错误。
i=0&&frameindex==0
为And 更新 while 循环的入口条件添加一个条件,而i<frameindex
不是i!=frameindex
推荐阅读
- c++ - 检查编号顺序
- python - 从 xlwings 更改单元格的宽度和高度
- deep-learning - batch_sampler 与 pytorch 数据加载器模块中的采样器有何不同
- python - 在if语句python中检查多个条件的更简单方法
- c# - 同时更新数据库中计数器值的正确方法?
- python - Scrape web pages using python
- python - 如何在 aws lambda 中添加 mecab 库
- node.js - Tsc 与 aws 崩溃
- visual-studio-code - ESLint 不建议在 VS 代码编辑器中进行任何修复
- api - 向 coinGecko API 发出请求时访问被拒绝错误 809