簡體   English   中英

C等效於C ++ delete [](字符*)

[英]C equivalent of C++ delete[] (char *)

什么是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)

在C語言中,您沒有new ; 你只有malloc() ; 為了釋放通過調用malloc()獲得的內存,將調用free()

也就是說,為什么要在將指針傳遞給(char*)之前將其轉換為delete 幾乎可以肯定這是錯誤的:傳遞給delete的指針必須與使用new創建的指針具有相同的類型(或者,如果具有類類型,則具有虛擬析構函數的基類)。

只是普通的ol free() C在數組和單個變量之間沒有區別。

相當於deletedelete[]的C語言是free嗎?

與非數組相同。

free(foo->bar)

等效為:

free(foo-> bar);

因為您將其類型轉換為(char *),這意味着無論'bar'的實際類型是什么,都不會因強制轉換而調用析構函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM