【发布时间】:2013-04-05 01:41:47
【问题描述】:
我对 c(和这个站点)还很陌生,我遇到了很多分段错误的问题。我正在编写一个程序,它创建一个数字链表并按升序插入值。
void insert(struct element **head, struct element *new){
if((*head)->next == NULL && (*new).i > (*(*head)->next).i){
(*head)->next = new;
return;
}
if((*head)->next == NULL && (*new).i < (*(*head)->next).i){
new->next = (*head)->next;
*head = new;
return;
}
struct element *prev = *head;
struct element *current = (*head)->next;
while(current->next != NULL){
if((*new).i < (*current).i){
prev = current;
current = current->next;
} else if((*new).i > (*current).i){
new->next = current;
prev->next = new;
}
}
}
int main (void){
struct element **head;
int value;
printf("%s", "TEST" );
printf("%s" , "Please type in an integer value. ");
scanf("%d" , &value);
printf("%s", "TEST" );
do{
printf("%s", "TEST" );
struct element *new;
if((new = malloc(sizeof(struct element))) == NULL){
return(NULL);
}
printf("%s", "TEST" );
(*new).i = value;
printf("%s", "TEST" );
if(head == NULL){
*head = new;
printList(*head);
} else if(value <= 0){
printListBackwards(*head);
}
else {
insert(head, new);
printList(*head);
}
} while(value > 0);
我不需要关于插入或其他任何逻辑是否正确的帮助。我什至没有机会真正测试它,因为在提示符后输入整数后,我立即遇到分段错误。我知道这看起来很时髦,但是规范要求您使用指向结构的指针(链表的头部)的指针。
【问题讨论】:
-
共享代码时,请确保其他用户可以快速编译您的代码并重现错误。您的代码在
main函数中缺少结构定义、函数甚至右括号。此外,在寻求帮助之前,请确保您的代码在编译时不显示警告/错误。尝试使用标志-Wall -Wextra进行编译。在找出段错误时,我发现valgrind是一个非常有用的工具,试一试。只需记住使用-g标志进行编译以生成调试符号
标签: c pointers linked-list segmentation-fault