Я изучаю связанные списки, и они вызывают у меня много неприятностей. Я вызываю функцию с этим вызовом:C - popping последний элемент из связанных списков
pop(&list);
А вот код:
void pop(NODE** first) {
if(*first != NULL && first!= NULL){
NODE* ptr = *first;
while(ptr->next->next != NULL){
ptr = ptr->next;
}
free(ptr->next);
ptr->next = NULL;
}
Это также вызывает ошибка утечки памяти, даже если я называю это единственный раз ..
При вызове эта функция несколько раз, есть больше ошибок утечки памяти.
Заранее спасибо, Mimpopo.
EDIT: Определение NODE
typedef struct node {
int data;
struct node *next;
} NODE;
Полный код:
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} NODE;
NODE* insert(NODE *first, int n){
// create new node
NODE* new = (NODE*)malloc(sizeof(NODE));
new->data = n;
new->next = NULL;
// if first is NULL, this will be the first
if(first == NULL)
return new;
// otherwise, place it correctly
NODE* ptr = first;
// check inserting at the begining
if(ptr->data > new->data){
new->next = ptr;
return new;
}
// insert in the middle
while(ptr->next != NULL){
if(ptr->next->data > n && ptr->data < n){
new->next = ptr->next;
ptr->next = new;
break;
}
ptr = ptr->next;
}
// insert at the end of list
if(ptr->next == NULL){
ptr->next = new;
}
return first;
}
void traverse(NODE *first){
NODE* ptr = first;
while(ptr != NULL){
printf("%d\n", ptr->data);
ptr = ptr->next;
}
}
NODE* search(NODE *first, int n){
NODE* ptr = first;
while(ptr != NULL){
if(ptr->data == n){
printf("FOUND %d\n!", n);
return ptr;
}
ptr = ptr->next;
}
}
int main(){
NODE* first = NULL;
NODE* this = NULL;
first = insert(first, 7);
first = insert(first, 10);
first = insert(first, 11);
first = insert(first, 1);
first = insert(first, 3);
first = insert(first, 5);
first = insert(first, 22);
first = insert(first, 23);
first = insert(first, 24);
first = insert(first, 125);
pop(&first);
}
Пожалуйста, добавьте к вашему вопросу декларацию 'NODE', и код, вызывающий 'pop'. –
Что именно вы подразумеваете под «ошибкой утечки памяти»? – rohit89
Одна из проблем, которые я вижу, состоит в том, что если 'first' содержит только одну запись,' while (ptr-> next-> next! = NULL) 'приведет к сбою seg. –