C/C++使用malloc為結構體陣列分配記憶體(及free釋放記憶體)的三種方法
以
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申請二維陣列的四種方法)
相關文章
- C/C++記憶體分配以及釋放C++記憶體
- C++ vector 釋放記憶體的兩種方法C++記憶體
- 記憶體的分配與釋放,記憶體洩漏記憶體
- C++動態記憶體分配C++記憶體
- C++ struct結構體記憶體對齊C++Struct結構體記憶體
- C語言記憶體管理,分配、使用、釋放以及安全性C語言記憶體
- C++ 指標動態記憶體分配C++指標記憶體
- 記憶體分配詳解 malloc, new, HeapAlloc, VirtualAlloc,GlobalAlloc記憶體
- C語言-記憶體分配C語言記憶體
- STM32記憶體結構介紹和FreeRTOS記憶體分配技巧記憶體
- XCode釋放記憶體XCode記憶體
- C中的記憶體分配模型記憶體模型
- C語言的記憶體分配C語言記憶體
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- vector 的記憶體釋放記憶體
- C# 垃圾回收釋放記憶體C#記憶體
- java-方法記憶體分配Java記憶體
- C++記憶體管理C++記憶體
- jvm:記憶體模型、記憶體分配及GC垃圾回收機制JVM記憶體模型GC
- C++ 類的記憶體分配是怎麼樣的?C++記憶體
- .Net記憶體管理釋放的兩種方式記憶體
- C++記憶體管理:簡易記憶體池的實現C++記憶體
- 記憶體結構記憶體
- 垃圾收集器與記憶體分配策略_記憶體分配策略記憶體
- C++六種記憶體序詳解C++記憶體
- java陣列記憶體的探究Java陣列記憶體
- java陣列的記憶體分析Java陣列記憶體
- vector clear() 方法 記憶體釋放問題記憶體
- 2024.04.18每日收穫之聯合體結構體記憶體分配結構體記憶體
- C++記憶體掃描C++記憶體
- C++記憶體管理剖析C++記憶體
- c 結構體記憶體對齊詳解結構體記憶體
- C++ 動態記憶體分配與名稱空間C++記憶體
- C程式記憶體的分配,const ,volatile,staticC程式記憶體
- 動態記憶體分配記憶體
- 結構體記憶體對齊結構體記憶體
- JVM記憶體結構JVM記憶體
- PostgreSQL:記憶體結構SQL記憶體