Работал над обучением себя C в среде Linux и написал код для чтения / записи из файла.Программа компилируется, но когда я ее запускаю, я получаю «ошибку сегментации».Это вся информация, которую мне дали;Я даже не знаю, откуда происходит ошибка в моем коде.
Поскольку я новичок в C, я сразу же перешел на Google: "Core Dump/Segmentation fault is a specific kind of error caused by accessing memory that “does not belong to you."
Это имеет смысл, иВо многих примерах здесь показано несколько распространенных ошибок, в основном связанных с переменными-указателями.Я просмотрел свой код несколько раз, но, похоже, не могу найти, где я незаконно обращаюсь к памяти.Может ли кто-то с лучшим знанием C помочь мне найти мою ошибку, а также, возможно, лучше объяснить, как она привела к ошибке сегментации?
#include <stdio.h>
#include <stdlib.h>
struct node
{
int value;
struct node *next;
} node;
void insert(struct node*);
struct node * head = NULL;
void main(int argc, char * argv[])
{
if(argc!=3)
{
printf("Please provide the input and output text file names as %s name1 name2\n", argv[0]);
return;
}
FILE *f;
if(!(f=fopen(argv[1], "r")))
{
printf("Input file %s cannot be opened.\n", argv[1]);
return;
}
struct node * line = (struct node*)malloc(sizeof(struct node));
if(line==NULL)
{
printf("Cannot do dynamic memory management.\n");
return;
}
while(fscanf(f,"%d",line->value)!=EOF)
{
printf("%d ",line->value);
line->next=NULL;
insert(line);
line=(struct node*)malloc(sizeof(struct node));
if(line==NULL)
{
printf("Cannot do dynamic memory management.\n");
return;
}
}
free(line);
printf("content:\n");
while(head!=NULL)
{
line=head;
head=head->next;
printf("%d ",line->value);
free(line);
}
fclose(f);
}
void insert(struct node * element)
{
struct node * temp = head;
struct node * pretemp = NULL;
while(temp!=NULL && temp->value > element->value)
{
pretemp=temp;
temp=temp->next;
}
if(pretemp==NULL)
{
element->next=head;
head=element;
}
else
{
pretemp->next=element;
element->next=temp;
}
}