当前位置:首页文章首页 IT学院 IT技术

不限长度动态分配内存(malloc、calloc和realloc) 让内存使用率提高

作者:  来源:  发布时间:2011-5-20 9:33:13  点击:

(1)、malloc在分配内存之后不会对分配的内存进行初始化

(2)、calloc在分配内存之后,在返回指向已分配的内存的指针之前会对内存进行初始化

(3)、realloc用于修改一个原先已分配的内存块大小,如果原先的内存块大小无法改变,该函数将分配一块正确大小的内存,并把原先那块内存的内容复制到新分配的内存块上。所以在使用该函数后,就不能再使用指向旧内存块的指针。该函数不对新内存初始化。

(4)、在一块内存不使用时使用free函数将内存释放。

下面的程序是动态分配内存:

/** * 将字符串复制到动态分配的内存中,不限值字符串的长度 * @file string_alloc.c * @brief * @author struggleLinux@gmail.com * @version 1.0 * @date 2011-05-19 */ #include #include #include #define False 0 /** * 获取字符并动态分配内存空间 * @brief alloc_string * * @return */ char * alloc_string( ) { char *string; int i , flag; string = (char *)malloc(1); //为分配一个字符长度 if( string == NULL ) return NULL; for( i = 0 ; (*(string+i) = getchar()) != EOF ;i++ ){ if(*(string+i) == 'Q' ){ //Q退出循环 *(string+i) = '\0'; break; } string = (char * )realloc( string,strlen(string)+1); //为string重新分配长度 if( string == NULL ){ break; } } return string; } int main() { char *str; str = alloc_string(); if( str == NULL ) printf("ERRORS:动态分配错误"); else printf("字符串为:\n%s\n",str); return 0; }

相关软件

文章评论

软件按字母排列: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z