Ale*_*ies 5 c malloc pointers initialization variable-length-array
我很好奇这个:
有什么区别:
const int MAX_BUF = 1000;
char* Buffer = malloc(MAX_BUF);
Run Code Online (Sandbox Code Playgroud)
和:
char Buffer[MAX_BUF];
Run Code Online (Sandbox Code Playgroud)
案例 1:在
char Buffer[MAX_BUF];
Run Code Online (Sandbox Code Playgroud)
Buffer是一个大小为 的数组MAX_BUF。分配技术称为VLA。
案例 2:在
const int MAX_BUF = 1000;
char* Buffer = malloc(MAX_BUF);
Run Code Online (Sandbox Code Playgroud)
Buffer是一个指针,它被分配了一个大小MAX_BUF为的内存1000。
并且,阵列是不一样的指针,和C-FAQ具有很好的收集详细的原因。
在可用性和行为方面的主要区别是:
malloc()d内存都应该是free()d。[ ]Courtesy: Giorgi注:维基
例如,GNU C 编译器在堆栈上为 VLA 分配内存。
除了其他人所说的之外,我还将添加一些有关内存管理的信息。
1)主要区别在这里:
const int MAX_BUF = 1000;
char* Buffer = malloc(MAX_BUF);
Run Code Online (Sandbox Code Playgroud)
您需要手动管理分配的内存,例如,Buffer在使用完毕后将其释放。忘记free它(或释放它两次)可能会导致麻烦。
2)对于第二种情况:
char Buffer[MAX_BUF];
Run Code Online (Sandbox Code Playgroud)
你不需要释放任何东西。它将自动被销毁。因此,您可以避免处理内存的任务 - 这很好。您应该始终尝试评估您需要哪种方法。
一些要点。
| 归档时间: |
|
| 查看次数: |
5409 次 |
| 最近记录: |