Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "быстрое " удаление из LinkedLista 
:(
    Опции темы
sol78
Дата 15.11.2007, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: 1
Всего: 0



Помогите разобраться в чем ошибка
Есть одна фун. она умеет обходить все узлы листа и обрабатывать обджект в каждом узле:
Код

void executeQ(qbuf* buffer, LinkedList* lost){
    int index;
    int result;
    Node* currentNode=NULL;
    Node* prevNode;
    Request* request=NULL;
    
    if(buffer&&lost){
        
        for(index=0; index<MAX_PRIORITY; index++){
            
            prevNode=NULL;
            currentNode=buffer->priorityNode[index]->head;
            
            while(currentNode){
                
                result=executeItem(currentNode->p_object);
                if(result!= NONEMOVE){
                    //    priority of current request was changed
                    request=eraseNode(buffer->priorityNode[index], currentNode, prevNode);


                    if(result==0){
                        // priority == 0, request moves to lost    
                        insertList(lost, request);
                        buffer->count--;
                    }
                    else
                        // priority >0, request moves to priority node in compliance with priority 
                        insertList(buffer->priorityNode[result-1], request);
                }
                
                prevNode=currentNode;

                currentNode=currentNode->next;
            }
        }
    }
}
 
и так как в каждый момент времени мне известно currentNode, prevNode я написала т.с. быстрое удаление (без поиска ):
Код


void* eraseNode(LinkedList* list,Node* node, Node* prev)
{
    void* obj=NULL;
    int i;

    if(list && list->head && node){
        obj=node->p_object;
        if(list->head==node){  //found in head
            if(list->head==list->tail){  //only one element in list
                list->tail=node->next;
                list->head=node->next;
            }
            else
                list->head=node->next;
        }
        else if(prev){
            if(list->tail==node){  //found in tail
                list->tail=prev;
                prev->next=NULL;
                
            }
            else{
                prev->next=node->next;
            }
            
        }
        else{
            obj=NULL; //wrong input param
        }
        free(node);
        list->count--;
    }
    return obj;
}

но как оказалось не все так просто...падает...залезаю не в свою памать..
что делать..как поправить?
или это вообще не правильный подход, помогите плиззз!!!?

PM MAIL   Вверх
DjoNIK
Дата 15.11.2007, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

Репутация: 4
Всего: 5



А что за сущности LinkedList, Node и qbuf? Твоего собственного изобретения? Если да, можно глянуть на их реализацию?


--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0516 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.