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語言記憶體分配,malloc,free,和段錯誤,記憶體洩露C語言記憶體洩露
- 【C/C++】記憶體分配函式:malloc,calloc,realloc,_allocaC++記憶體函式
- 關於C++ delete 來釋放new分配的記憶體C++delete記憶體
- 控制C++的記憶體分配C++記憶體
- [Virtualization]ESXi體系結構與記憶體管理(三)控制記憶體分配記憶體
- 記憶體動態分配與釋放,malloc和new區別記憶體
- 二維陣列的動態記憶體分配和釋放 (轉)陣列記憶體
- STM32記憶體結構介紹和FreeRTOS記憶體分配技巧記憶體
- vector 避免記憶體頻繁分配釋放與手動釋放vector記憶體記憶體
- 記憶體管理概述、記憶體分配與釋放、地址對映機制(mm_struct, vm_area_struct)、malloc/free 的實現記憶體Struct
- C++ 動態記憶體分配C++記憶體
- C++動態記憶體分配C++記憶體
- C++ struct結構體記憶體對齊C++Struct結構體記憶體
- Linux釋放記憶體及手動釋放Oracle共享記憶體段Linux記憶體Oracle
- [Virtualization]ESXi體系結構與記憶體管理(二)控制記憶體分配記憶體
- C/C++記憶體釋放應注意的問題C++記憶體
- C++記憶體分配與物件構造的分離C++記憶體物件
- C語言記憶體管理,分配、使用、釋放以及安全性C語言記憶體
- C語言-記憶體管理之一[記憶體分配]C語言記憶體
- C++ 指標動態記憶體分配C++指標記憶體
- C++陣列的儲存|C++陣列所佔記憶體空間C++陣列記憶體
- C/C++——C和C++怎樣分配和釋放記憶體,區別是什麼?C++記憶體
- 一種高效的 C++ 固定記憶體塊分配器C++記憶體
- vector 的記憶體釋放記憶體
- C# 垃圾回收釋放記憶體C#記憶體
- 記憶體分配詳解 malloc, new, HeapAlloc, VirtualAlloc,GlobalAlloc記憶體
- C語言-記憶體分配C語言記憶體
- 【C++】C++ 記憶體分配(new,operator new)詳解C++記憶體
- C語言的記憶體分配C語言記憶體
- C中的記憶體分配模型記憶體模型
- java-方法記憶體分配Java記憶體
- C語言malloc()函式:動態分配記憶體空間C語言函式記憶體
- JVM 記憶體模型 記憶體分配,JVM鎖JVM記憶體模型
- C++ 記憶體分配(new,operator new)詳解C++記憶體