C/C++使用malloc為結構體陣列分配記憶體(及free釋放記憶體)的三種方法

Ayka發表於2020-12-09

template<typename Key, typename Value>
struct Node {};

為例,試建立有n個Node型別的node的陣列。

方法一(nodes[i]為指標):

struct Node<int, int> *nodes[n];
for (size_t i = 0; i < n; i++)
    nodes[i] = (struct Node<int, int>*)malloc(sizeof(struct Node<int, int>) * n); 

使用

for (size_t i = 0; i < n; i++) {
    std::free(nodes[i]);
}

釋放nodes的記憶體。

方法二(nodes[i]為指標):

struct Node<int, int> **nodes = (struct Node<int, int>**)malloc(sizeof(struct Node<int, int>*) * n);
for (size_t i = 0; i < n; i++)
    nodes[i] = (struct Node<int, int>*)malloc(sizeof(struct Node<int, int>));

使用

for (size_t i = 0; i < n; i++) {
    std::free(nodes[i]);
}
std::free(nodes);

釋放nodes的記憶體。

方法三(nodes[i]為結構體struct):

struct Node<int, int> *nodes = (struct Node<int, int>*)std::malloc(sizeof(struct Node<int, int>) * n);

 使用

std::free(nodes);

釋放nodes的記憶體。如果將nodes插入到類中,注意應考慮類的解構函式。

錯誤方法:

struct Node<int, int> (*nodes)[n] = (struct Node<int, int>(*)[n])std::malloc(sizeof(struct Node<int, int>) * n);

(參考How to dynamically allocate a 2D array in C?malloc申請二維陣列的四種方法

相關文章