大家好,又见面了,我是你们的朋友全栈君。
【FROM MSDN && 百科】
原型: void *malloc(unsigned int size);
#include<stdlib.h>或#include <malloc.h>
malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。
malloc 向系统申请分配指定size个字节的内存空间(连续的一块内存)。返回类型是 void* 类型。void* 表示未确定类型的指针。
void *可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据,C,C 规定,void* 类型可以强制转换为任何其它类型的指针。
allocates a block of size bytes of memory, returning a pointer to the beginning of the block.
如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。
比如想分配100个int类型的空间:int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100个整数的内存空间。
malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。
申请零字节内存,函数并不返回NULL,而是返回一个正常的内存地址,但是你却无法使用这块大小为0的内存。
DEMO:
代码语言:javascript复制#include <stdio.h>
#include <conio.h>
int main(void)
{
int i,n;
char *buffer;
printf("How long do you want the string ?");
scanf("%d",&i);
buffer=(char *)malloc(i 1);
if (buffer == NULL)
{
exit(1);
}
for (n=0;n<i;n )
{
buffer[n]=rand()& 'a'; /*generate 0-25 */
}
buffer[i]='