Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / new / delete / 4 сообщений из 4, страница 1 из 1
01.11.2013, 15:42
    #38450127
wvetal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
new / delete
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
void test()
{
  char *comp;

  comp = new char [10];

  if (comp)
    delete[] comp;

  if (comp)
    delete[] comp; // почему попадает сюда, ведь память уже освобождена?
                         // это ведет к _block_type_is_valid(phead- nblockuse) - и прога вылетает
                         // как правильно организовать, чтоб delete не вызывался, если память уже была освобождена?

}
...
Рейтинг: 0 / 0
01.11.2013, 15:55
    #38450152
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
new / delete
wvetal,

if (comp) не проверяет есть ли память, а проверяет установлен ли указатель (неважно есть ли там куда он указывает выделенная память).
delete не трогает указатель, а только освобождает память, а указатель остается установленным (не NULL)и поэтому следущий if (comp) снова срабатывает.
...
Рейтинг: 0 / 0
01.11.2013, 18:52
    #38450437
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
new / delete
wvetal, ДОЛЖНО БЫТЬ так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
void test()
{
  char *comp;

  comp = new char [10];

  if (comp)
  {
    delete[] comp;
    comp = NULL;
  }

  if (comp)
  {
    delete[] comp;
    comp = NULL;
  }

  // можно и так, без if (comp)
  delete[] comp;
  comp = NULL;
  
  // потому что по стандарту delete NULL и delete [] NULL вполне допустимо.
}
...
Рейтинг: 0 / 0
03.11.2013, 22:39
    #38451424
wvetal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
new / delete
Anatoly Moskovsky, MasterZiv,

Спасибо.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / new / delete / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]