1

C++に相当するCは何ですか

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

編集:いくつかのC++コードをANSICに変換しています。

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)
4

5 に答える 5

6

newC には;がありません。あなたはただ持っていmalloc()ます; への呼び出しによって取得されたメモリを解放するにはmalloc()free()が呼び出されます。

とはいえ、なぜポインターを(char*)に渡す前にキャストするのでしょうdeleteか? これはほぼ確実に間違っています: に渡されるポインタはdelete、作成されたものと同じ型でなければなりませんnew(または、クラス型を持っている場合は、仮想デストラクタを持つ基底クラスのものでなければなりません)。

于 2010-06-03T14:46:17.430 に答える
2

単純にfree()。C では、配列と個々の変数を区別しません。

于 2010-06-03T14:46:39.400 に答える
0

C は and に相当しdeletedelete[]単にfree?

于 2010-06-03T14:46:17.920 に答える
0

非配列の場合と同じです。

free(foo->bar)
于 2010-06-03T14:47:11.113 に答える
0

同等のものは次のようになります。

free(foo->bar);

(char *) に型キャストしていたため、実際の「バー」の型が何であれ、キャストの結果として呼び出されるデストラクタはありませんでした。

于 2010-06-03T14:48:34.937 に答える