C эквивалент C ++ delete [] (char *) - PullRequest
1 голос
/ 03 июня 2010

Что такое C-эквивалент C ++

delete[] (char *) foo->bar;

Редактировать: я конвертирую некоторый код C ++ в ANSI C. И он имеет:

typedef struct keyvalue
{
  char *key;
  void *value;
  struct keyvalue *next;
} keyvalue_rec;

// ...

  for (
    ptr = this->_properties->next, last = this->_properties;
    ptr!=NULL;
    last = ptr, ptr = ptr->next)
  {
    delete[] last->key;
    delete[] (char *) last->value;
    delete last;
  }

Будет ли это делать для C ?

free(last->key);
free(last->value);
free(last)

Ответы [ 5 ]

6 голосов
/ 03 июня 2010

В C у вас нет new; у вас просто есть malloc(); для освобождения памяти, получаемой при вызове malloc(), вызывается free().

Тем не менее, зачем вам указывать указатель на (char*), прежде чем передавать его на delete? Это почти наверняка неправильно: указатель, передаваемый на delete, должен быть того же типа, что и созданный с помощью new (или, если он имеет тип класса, то базового класса с виртуальным деструктором).

2 голосов
/ 03 июня 2010

Просто просто 'ol free(). C не делает различий между массивами и отдельными переменными.

0 голосов
/ 03 июня 2010

Эквивалент будет:

бесплатно (foo-> бар);

с тех пор, как вы ввели его в тип (char *), что означает, что независимо от того, каким был фактический тип 'bar', не было бы никакого деструктора, вызванного в результате приведения.

0 голосов
/ 03 июня 2010

То же, что и для не массивов.

free(foo->bar)
0 голосов
/ 03 июня 2010

C эквивалентно delete и delete[] просто free?

...