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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Структура не удаляется почему, free используется 
:(
    Опции темы
Annihilator
Дата 27.11.2007, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

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



===== Программа на двусвязные списки ====
Код

struct Elem
{
    int value;
    struct Elem *pPrev;
    struct Elem *pNext;
};

Создаю структуру
add_first(&pElem, val);

int add_first (struct Elem **p_pElem, int value)
{
    if (!(*p_pElem))
    {
        (*p_pElem)=(struct Elem*)malloc(sizeof(struct Elem));
        ............
    }
    else
    {
        ............
    }
    return 1;
}

Уничтотжаю ее
delete_first(&pElem);

int delete_first(struct Elem **p_pElem)
{
    struct Elem *temp;
    temp=(*p_pElem)->pNext;
    free (*p_pElem); // здесь должно все похерится, но этого не происходит
    *p_pElem=temp;
    (*p_pElem)->pPrev=NULL;
    return -1;
}

после вызова free() структура почему-то не разрушается, хотя сделал все в отдельном проекте, чтобы проверить, чисто 

создал структуру с помощью malloc(), а потом удалил с помощью free(), сделав для этого отдельную функцию и передав 

туда указатель на структуру и все получилось, т.е. значения полей приняли неопределенный вид, а в этой проге не 

хочет так, т.е. после вызова free() все остается на местах

Это сообщение отредактировал(а) Daevaorn - 27.11.2007, 21:42


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
JackYF
Дата 27.11.2007, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Annihilator @  27.11.2007,  21:09 Найти цитируемый пост)
после вызова free() структура почему-то не разрушается

как ты это определял? free только освобождает память, и то косвенно.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Annihilator
Дата 27.11.2007, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

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



Цитата(JackYF @  27.11.2007,  21:19 Найти цитируемый пост)
как ты это определял?

В окошке дебаггера (BDS 2006) - когда видно что память особождается после прохода строчки free(что-то) значения полей в структуре сразу принимают посторонние значения


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
MAKCim
Дата 27.11.2007, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Annihilator
после вызова free() некоторое время данные могут сохраняться
т. к освобожденный участок памяти просто добавляется в список свободных участков и не более того
далее он может быть возвращен аллокатором при запросе через malloc()
в любом случае, освобожденный участок памяти использовать нельзя во избежании последствий

Это сообщение отредактировал(а) MAKCim - 27.11.2007, 22:08


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Annihilator
Дата 1.12.2007, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

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



MAKCim, все окей я разобрался, короче после free() тут же выделяю память и память выделяется по старому адресу, т.е. по тому, по которому только что освободил, а вот почему цифарки не сбрасываются в окне дебаггера в этом случае, так это прикол среды разработкиsmile


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
archimed7592
Дата 1.12.2007, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Annihilator @  1.12.2007,  19:48 Найти цитируемый пост)
вот почему цифарки не сбрасываются в окне дебаггера в этом случае, так это прикол среды разработки

Это вовсе не прикол - так устроены все менеджеры памяти и от дебаггера это не зависит.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
bsa
Дата 2.12.2007, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Эх. Лучше бы для начала объясняли школьникам, как работает компьютер, ОС и компилятор - не было бы таких проблем...
PM   Вверх
JackYF
Дата 2.12.2007, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



bsa, поддерживаю.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
archimed7592
Дата 2.12.2007, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



bsa, мне ничего не объясняли... Я до всего доходил сам. А пока не доходил, жил с неправильным представлением и ничуть оно мне жить не мешало smile. Наоборот, порой помогало smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
MAKCim
Дата 2.12.2007, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



bsa
для школьников такие вещи будут в общем случае сложны


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
bsa
Дата 2.12.2007, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



MAKCim, ты считаешь, что изучение С++ проще, чем объяснение в двух словах, как работают конкретные подсистемы компьютера? По-моему, правильный было бы объяснять им, что такое память, процессор, что делает компилятор, что делает ОС...
PM   Вверх
MAKCim
Дата 2.12.2007, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(bsa @  2.12.2007,  12:37 Найти цитируемый пост)
ты считаешь, что изучение С++ проще, чем объяснение в двух словах, как работают конкретные подсистемы компьютера? По-моему, правильный было бы объяснять им, что такое память, процессор, что делает компилятор, что делает ОС...

ты считаешь, что С++ в школе нужно изучать?  smile 
не уверен...
к тому же, если нормально объяснять, что делает ОС, большинство школьников не поймет о чем речь, потому как тут нужна база по многим низкоуровневым вещам
а если в двух словах, то что это даст?
какое-то понимание? очень сомневаюсь

Это сообщение отредактировал(а) MAKCim - 2.12.2007, 14:00


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Annihilator
Дата 4.12.2007, 20:08 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

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



Если честно о каких школьниках идет речь я не понял, товарищи... но то, что когда я в отдельном(!!!) проекте ощуствил эту функцию точно так же как в старом проекте, окно дебаггера СБРАСЫВАЛОСЬ.
Так может все-таки не будем умничать, уважаемые


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
archimed7592
Дата 4.12.2007, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Annihilator, ты хочешь поговорить об этом в конструктивном тоне? Если нет, то советую:
1. не переходить на личности.
2. не умничать самому.
3. не говорить о вещах, о которых ты не знаешь практически ничего, в таком тоне, будто ты этим с пелёнок занимаешься.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Random13
Дата 4.12.2007, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Судя по всему.
Когда ты создавал и уничтожал одну структуру окно дебаггера сбрасывалось. А когда у тебя структуры идут подряд, в своего рода массиве или списке, окно дебаггера с struct** сбрасываться и не должно.
А память в С такая вещь.
Мой друг один раз создал массив длины 100 и обратился в проге случайно к 1000-му элементу - так ему даже BIOS стерло.  smile 

В любом случае все это не повод обижаться и переходить на личности. Я вот тоже вроде и знаю чего-то, но ощущаю себя учеником и неучем. В любом случае в ЕГО глазах мы все глупые дети - так, что обиды ничего не дают, но учить нужно.  Важно чего человек сам реально знает, а не кто там чего о нем сказал или подумал...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.1588 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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