【发布时间】:2014-02-27 13:32:19
【问题描述】:
谁能确定我的代码中发生了什么导致分段错误?请修改/更正错误的部分。
void InsertAtMid (Node *head){
int num,count=0,i;
Node *ptr=head;
Node *newnode=NULL;
Node *newnode2=head;
printf("Enter node to be inserted: ");
scanf("%d", &num);
if (head==NULL){
newnode = head;
newnode=(Node *)malloc(sizeof(Node));
newnode->x=num;
newnode->next=NULL;
newnode->prev=NULL;
} else {
ptr=head->next;
while(ptr->x!=(count/2)){
ptr=ptr->next;
}
newnode->next=ptr->next;
newnode->prev=ptr;
ptr->next->prev=newnode;
ptr->next=newnode;
}
}
【问题讨论】:
-
如果 head 的 next 为 null,这不会正常; ptr=head->下一个;而(ptr->x
-
我应该如何更正它?
-
只是一个评论;不要将用户界面放在这样的函数中。将其设为
insertAtMid(Node *head, int num)并在调用者的某处设置scanf。它使函数更普遍有用。 -
如果
head不是NULL,则不能运行此newnode->next,因为newnode是NULL。 -
@user3360685 你应该永远保持
newnode是一个新分配的。