у меня такая структура
typedef struct node
{
struct node *prev;
void *data;
struct node *next;
}NODE;
typedef struct head
{
unsigned int length;
struct node *first;
struct node *last;
}HEAD;
STATUS addNode(HEAD *head, NODE *newNode, int loc)
{
int i;
STATUS ret = SUCCESS;
NODE *curPtr;
if(head && newNode && loc && (loc <= (head->length)+1))
{
if(loc == 1)
{
newNode->prev = NULL;
newNode->next = head->first;
if(head->first)
head->first = newNode;
}
else
{
curPtr = head->first;
for(i=1; i<(loc-1); i++){
curPtr = curPtr->next;
}
newNode->prev = curPtr;
newNode->next = curPtr->next;
if(curPtr->next){
curPtr->next->prev = newNode;
}
curPtr->next = newNode;
}
head->length++;
}
else
ret = FAILURE;
return ret;
}
STATUS removeNode(HEAD *head,NODE *nodeToRemove)
{
STATUS ret = SUCCESS;
NODE *curPtr;
if(head && head->first)
{
curPtr = nodeToRemove->prev;
curPtr->next = nodeToRemove->next;
if(!(curPtr->next)){
curPtr->next = head->first;
}
head->length--;
}
else
ret = FAILURE;
return ret;
}
Я знаю, что не вызываю free(node) при удалении из списка, этот вызов сделан где-то еще
моя проблема в том, что иногда на строке newNode->next = curPtr->next;
в узле добавления падает ошибка сегментации
не могли бы вы сказать мне причину, по которой это может произойти?
loc == 1
, на что указывает указатель старых первых узловprev
? А если список пуст, то почему вы вообще не добавляете узел? - person Some programmer dude   schedule 11.01.2015curPtr
этоNULL
? - person Some programmer dude   schedule 11.01.2015loc
больше, чем узлов в списке? - person Some programmer dude   schedule 11.01.2015