void *memset(void s,int ch, unsigned n)
功能:将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针
特点:memset可以方便的清空一个结构体变量或数组(在程序设计中的主要用法) memset(TEST,0,sizeof(struct sample_struct)10);
初始化:
char str[100];
memset(str,0,100);void* memcpy(void *dest, const void *src, size_t n); 内存拷贝函数
功能:从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
返回值:指向dest的指针
说明:1.source和destin所指的内存区域可能重叠,但是如果source和destin所指的内存区域重叠,那么这个函数并不能够确保source所在重叠区域在拷贝之前不被覆盖。而使用memmove可以用来处理重叠区域。函数返回指向destin的[指针如果目标数组destin本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果要追加数据,则每次执行memcpy后,要将目标数组地址增加到你要追加数据的地址。
void * malloc(int n)
功能:从堆上分配内存.如果执行成功,返回获得内存空间的首地址,如果执行失败, 那么返回值为NULL.一般通过强制类型转换.
说明:由于malloc分配得到的空间是未初始化的,因此一般需要调用memset()使它初始化.void free (void *p)
功能:释放指针指向的内容.从堆上获得的内存空间在程序结束后,系统不会将其自动释放,需要程序员自己释放,否则会导致内存泄漏.
说明:如果只用free(p),会导致指针成为野指针,如果此时操作指针会导致不可预期的错误.因此还需要p = NULL;void * calloc(int n, int size)
功能:从堆上分配内存.如果执行成功,返回获得内存空间的首地址,如果执行失败, 那么返回值为NULL
说明:calloc函数得到的内存空间是经过初始化的,其内容全为0。calloc函数适合为数组申请空间,可以将size设置为数组元素的空间长度,将n设置为数组的容量void * realloc(void *p, int n)
功能:主要用于p指向的内存空间不够,然后需要在原有的基础上添加一些额外的空间.
说明:指向的空间也是未初始化的,需要memset().同时需要free().void* alloca(int n)
alloca是在栈上申请 ,所以是不需要自己手动释放的。再一个在栈上是不能开辟大内存空间的!
malloc是在堆上申请
C语言分配空间的一些函数
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...