先决条件: C中的动态内存分配
“ malloc”或“内存分配”方法用于动态分配具有指定大小的单个大内存块。它返回类型为void的指针,该指针可以转换为任何形式的指针。它使用默认垃圾值初始化每个块。
句法:
ptr = (cast-type*) malloc(byte-size)
例如:
ptr = (int*) malloc(100 * sizeof(int));
Since the size of int is 4 bytes, this statement will allocate 400 bytes of memory. And, the pointer ptr holds the address of the first byte in the allocated memory.
但是使用malloc()的内存分配不会自行取消分配。因此,“ free()”方法用于取消分配内存。但是free()方法不是强制性的。如果在程序中未使用free(),则使用malloc()分配的内存将在程序执行完成后被取消分配(所包含的程序执行时间相对较短,并且程序正常结束)。尽管如此,在使用malloc()之后还有一些重要的原因需要free ():
- 在malloc之后使用free是良好的编程习惯。
- 有一些程序,例如数字时钟,在后台运行很长时间的侦听器,还有一些此类程序会定期分配内存。在这些情况下,即使很小的存储量也会加起来并造成问题。因此,我们的可用空间减少了。这也称为“内存泄漏”。如果未在正确的时间进行内存的重新分配,我们的系统也可能会发生内存不足的情况。
因此, free()函数的使用取决于程序的类型,但是建议避免诸如内存泄漏之类的不必要的内存问题。
下面是说明free()和malloc()用法的程序:
// C program to illustrate free()
// and malloc() function
#include
#include
// Driver Code
int main()
{
// Pointer to hold base address
// of memory block
int* p;
int n, i;
// Number of element
n = 3;
// Dynamically allocate memory
// using malloc()
p = (int*)malloc(n * sizeof(int));
// Check if memory allocation is
// successfull or not.
if (p == NULL) {
printf("Memory allocation"
" failed.\n");
exit(0);
}
else {
// Memory allocation successful
printf("Memory allocation "
"successful using"
" malloc.\n");
// Insert element in array
for (i = 0; i < n; i++) {
p[i] = i + 2;
}
// Print the array element
printf("The array elements"
" are:\n");
for (i = 0; i < n; i++) {
printf("%d ", p[i]);
}
// De-allocate the allocated
// memory using free()
free(p);
}
return 0;
}
输出:
Memory allocation successful using malloc.
The array elements are:
2 3 4
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。