这里我将结构从一个节点复制到另一个节点但是当我遇到最后一个节点时,由于temp_clsf->next
中的memcpy
将指向无效位置,我将遇到分段错误,我该怎么办?解决这个问题?我不能免费temp_clsf
因为它不是动态分配。
while(temp_clsf!=NULL)
{
memcpy(&temp_clsf, &temp_clsf->next, sizeof(struct classifier));
if(temp_clsf->next ==NULL)
return;
else
temp_clsf = temp_clsf->next;
}
答案 0 :(得分:1)
在循环内部,保留指向前一个节点的指针。循环结束时,使用指向NULL的指针更新该节点
/* pseudo-code */
while () {
prev = curr;
/* ... */
}
prev->next = NULL;
答案 1 :(得分:0)
只需在if
...
while(temp_clsf!=NULL)
{
if(temp_clsf->next ==NULL)
return;
//else
memcpy(&temp_clsf, &temp_clsf->next, sizeof(struct classifier));
temp_clsf = temp_clsf->next;
}
答案 2 :(得分:0)
在while中使用以下条件。
while(temp_clsf->next!=NULL)
答案 3 :(得分:0)
可能temp_clsf->next
可能是NULL
,因此请在NULL
之前移动memcpy
while(temp_clsf != NULL)
{
if(temp_clsf->next == NULL)
{
return;
}
memcpy(&temp_clsf, &temp_clsf->next, sizeof(struct classifier));
temp_clsf = temp_clsf->next;
}
更新:temp_clsf
和temp_clsf->next
看起来像指针。所以你的memcpy
正在接收指针并覆盖那些指针。这是你的意图吗?不确定sizeof(struct classifier)
是什么,因为我们在您的示例中没有结构类型。
答案 4 :(得分:0)
看起来您正在进行项目转移,可能会删除一项。如果这是一个有序数组,则不需要使用next
指针。我不确定您使用的其他静态分配,但您只需执行以下操作即可删除单个项temp_clsf->next
:
temp_clsf->next=temp_clsf->next->next;