Я написал программу для выполнения односвязаны операций списка insert at a particular position
теперь нет узлов в данный момент, когда я даю вход: 3 вопросу enter the position to be inserted
он показывает сообщение об ошибке выполненияодносвязаны операции списка вставка в определенной позиции
void insert_pos()
{
struct node * temp, *loc;
int item,pos,len;
printf("enter the position to be insertd :");
scanf("%d", &pos);
if (pos == 1)
{
insert_beg();
}
else
{
len = length();
if (start == NULL)
{
insert_beg();
}
else if (pos > len)
{
insert_end();
}
else
{
newnode = (struct node *)malloc(sizeof(struct node));
printf("enter the data :");
scanf("%d", &item);
newnode->data = item;
int i;
temp = start;
loc = temp->next;
for (i = 1; i < pos - 1; i++)
{
temp = temp->next;
loc = loc->next;
}
temp->next = newnode;
newnode->next = loc;
}
}
}
int length()
{
int k = 1;
struct node * temp;
while (temp->next != NULL)
{
temp = temp->next;
k++;
}
return k;
}
из положить
1.insert @ beg
2.insert @ end
3.insert @ perticular pos
4.display
5.exit
enter your option :3
enter the position to be inserted :3
теперь всплывает окно отладки говоря об ошибке Просьба помочь мне с этим
«Ошибка выполнения» - это сбой. Вы решаете их, сначала выясняя, где в вашем коде происходит авария. Вы делаете это, работая в отладчике и ловя крах «в действии». Когда в отладчике и попав в ловушку, вы можете проверить значения задействованных переменных, чтобы увидеть, являются ли они такими, какие вы ожидаете от них. –
Функция 'int length()' вызывает UB: 'struct node * temp' содержит мусор, это недействительный указатель. Затем вы разыскиваете его ('temp-> next') ... это никогда не будет вести себя так, как вы хотите, чтобы оно было –
Но вот вам подсказка: Неинициализированные переменные имеют * неопределенные значения *, а их использование приводит к * неопределенному поведению * , что является общей причиной сбоев. –