Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Сборка мусора ...  (Прочитано 3489 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн LevelZero

  • Автор темы
  • Любитель
  • *
  • Сообщений: 56
    • Просмотр профиля
Сборка мусора ...
« : 26 Сентября 2006, 16:05:42 »
Увы ничего не нагуглил ... :'(
пример: :-\


    gchar *p;
    gchar *Value, *NewValue;
    gchar *Array[5];

for (i = 0; i < 5; i++){
      p = g_malloc(strlen(Value));
      strcpy(p, Value);
      Array = p;
}
Array[0] = NewValue;


указатель Array[0] теперь показывает на NewValue :)
но прежнее значение так и сидит в памяти, только на неё никто не указывает :(
она (память) будет считаться свободной ? :o
если нет, то как её освободить ? :o
и как тогда правильно подсунуть указатель в g_free(p); ? :o


Оффлайн NEG

  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Re: Сборка мусора ...
« Ответ #1 : 26 Сентября 2006, 17:05:29 »
Цитировать
Увы ничего не нагуглил ... Cry
пример: Undecided


    gchar *p;
    gchar *Value, *NewValue;
    gchar *Array[5];

for (i = 0; i < 5; i++){
      p = g_malloc(strlen(Value));
      strcpy(p, Value);
      Array = p;
}
Array[0] = NewValue;

указатель Array[0] теперь показывает на NewValue Smiley
но прежнее значение так и сидит в памяти, только на неё никто не указывает Sad
она (память) будет считаться свободной ? Shocked
если нет, то как её освободить ? Shocked
и как тогда правильно подсунуть указатель в g_free(p); ? Shocked

В си мусор автоматически не подчищается.
А освободить память можно так
    gchar *p;
    gchar *Value, *NewValue;
    gchar *Array[5];

for (i = 0; i < 5; i++){
      p = g_malloc(strlen(Value));
      strcpy(p, Value);
      Array = p;
}
g_free(Array[0]);
Array[0] = NewValue;

Оффлайн LevelZero

  • Автор темы
  • Любитель
  • *
  • Сообщений: 56
    • Просмотр профиля
Re: Сборка мусора ...
« Ответ #2 : 27 Сентября 2006, 10:53:41 »
Увы mon ami, сие было первое что с делал :)
и вот что получал :(

*** glibc detected *** free(): invalid pointer: 0x0804e409 ***
----------------------------------------------
Program has been terminated receiving signal 6 (Aborted)


именно постому и гуглил и сюда обратился ... :'(
почти уверен что дело в программе, логике выделения памяти ... :-[
сher ami Ваш совет - совет практика ? :-\

Оффлайн LevelZero

  • Автор темы
  • Любитель
  • *
  • Сообщений: 56
    • Просмотр профиля
Re: Сборка мусора ...
« Ответ #3 : 27 Сентября 2006, 14:05:00 »
 :)
тема закрыта ...
на одном из стапов отладки получилось так что
один из указателей массива указывал на область памяти
выделенную не с помощью g_malloc ... :(
вследствии чего попытка освободить эту область с помощью g_free
вызывала ошибку - *** glibc detected *** free(): invalid pointer: 0x0804e409 ***
будем считать что разобрался сам ...  ;)

Оффлайн Null_123

  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Re: Сборка мусора ...
« Ответ #4 : 01 Октября 2006, 16:02:48 »
Гы! и после стого мне будут говорить, что GC не нужен... :)

 

Страница сгенерирована за 0.052 секунд. Запросов: 25.