动态内存分配的一些总结
时间:2010-11-28 来源:Mrt-l
1、malloc,calloc,realloc,free, 这几个函数均在头文件stdlib.h中定义。
2、原型如下:
void *malloc( size_t size );
void free( void *pointer );
void *calloc( size_t num_elements, size_t element_size );
void realloc( void *ptr, size_t new_size ); 3、功能
malloc向内存池请求一块大小为size字节的内存,如果请求成功则返回
一个指向该内存的指针,指针的类型为(void *),并且新分配的内存并未以
任何的值进行初始化.如果内存池的大小不够则向操作系统请求更多的内存,
并在这块新的内存上执行分配任务。如果操作系统无法提供更多的内存,
malloc则返回一个NULL指针。因此在使用malloc函数时应该对返回的指针进
行检查,确保内存分配成功,确保返回的不是NULL指针。
free函数是释放一块动态分配的内存。它的参数来自malloc,calloc,realloc
返回的指针。它不允许释放一块内存的一部分。
calloc基本的功能跟malloc相似,但是calloc分配的内存在返回之前已经
初始化为0了。
realloc是扩大或者缩小一块动态内存。如果是扩大的话就在原来内存的后面
增加一块新的内存,原来内存的大小和值都不变,也有可能是新开辟一块新的内存
并且将原来内存中的值复制到新开辟的内存中;如果是缩小一块内存的话,则在原
来内存的末尾截掉目标大小,剩下内存中的值跟原来一样。 4、在使用这些库函数进行动态内存分配时,一定要检查返回的指针是否为NULL指针。 2010-11-28
void *malloc( size_t size );
void free( void *pointer );
void *calloc( size_t num_elements, size_t element_size );
void realloc( void *ptr, size_t new_size ); 3、功能
malloc向内存池请求一块大小为size字节的内存,如果请求成功则返回
一个指向该内存的指针,指针的类型为(void *),并且新分配的内存并未以
任何的值进行初始化.如果内存池的大小不够则向操作系统请求更多的内存,
并在这块新的内存上执行分配任务。如果操作系统无法提供更多的内存,
malloc则返回一个NULL指针。因此在使用malloc函数时应该对返回的指针进
行检查,确保内存分配成功,确保返回的不是NULL指针。
free函数是释放一块动态分配的内存。它的参数来自malloc,calloc,realloc
返回的指针。它不允许释放一块内存的一部分。
calloc基本的功能跟malloc相似,但是calloc分配的内存在返回之前已经
初始化为0了。
realloc是扩大或者缩小一块动态内存。如果是扩大的话就在原来内存的后面
增加一块新的内存,原来内存的大小和值都不变,也有可能是新开辟一块新的内存
并且将原来内存中的值复制到新开辟的内存中;如果是缩小一块内存的话,则在原
来内存的末尾截掉目标大小,剩下内存中的值跟原来一样。 4、在使用这些库函数进行动态内存分配时,一定要检查返回的指针是否为NULL指针。 2010-11-28
相关阅读 更多 +