c语言的小问题,可否这样free
2个回答
展开全部
在 C 语言中,free( ) 是释放内存的库函数,它的函数原型在 stdlib.h 头文件中有定义。
另外,为指针变量分配内存的库函数有:malloc( )、calloc( )、realloc( )。
但是记住一点就是,为某个指针变量分配了一个内存的同时,必须要判断该内存分配是否成功。即:如果返回空指针 NULL,那么内存分配失败,立即退出应用程序,根本就不需要使用 free( ) 函数释放内存。否则的话,如果内存根本就没有分配成功,仍然使用 free( ) 函数去释放内存,系统也会出问题的。
根据我多年的编程经验,最好的程序可以写成如下的风格,详细举例如下(以 malloc 为例,其它函数同理):
#include <stdio.h>
#include <stdlib.h> /* malloc( ) 函数、free( ) 函数在此头文件有定义 */
void main( ) /* 主函数开始 */
{
char * p ; /* 定义一个字符指针变量 p */
p = (char *)malloc(10000*sizeof(char) ) ; /* 为 p 分配一块大小为 10000 个字节的内存,因为 sizeof(char) 的值为 1,故 malloc 分配的总大小为:10000 */
if( p == NULL ) /* 该语句绝对不能够省略,如果分配内存失败(即:返回 NULL),则立即退出应用程序,此时根本就不需要使用 free( ) 进行释放内存 */
{
printf("Memory allocation failured !\n") ; /* 输出:内存分配失败 */
exit(1) ; /* 立即退出应用程序 */
}
strcpy( p , "This is a test string !!!\n" ) ; /* 如果内存分配成功的话,往变量 p 中拷贝一个字符串 */
printf("%s\n", p) ; /* 将拷贝到 p 中的字符串显示在屏幕上 */
free( p ) ; /* 此时在退出应用程序之前,一定要记得使用 free( ) 函数释放刚才成功分配到的内存 */
}
另外,为指针变量分配内存的库函数有:malloc( )、calloc( )、realloc( )。
但是记住一点就是,为某个指针变量分配了一个内存的同时,必须要判断该内存分配是否成功。即:如果返回空指针 NULL,那么内存分配失败,立即退出应用程序,根本就不需要使用 free( ) 函数释放内存。否则的话,如果内存根本就没有分配成功,仍然使用 free( ) 函数去释放内存,系统也会出问题的。
根据我多年的编程经验,最好的程序可以写成如下的风格,详细举例如下(以 malloc 为例,其它函数同理):
#include <stdio.h>
#include <stdlib.h> /* malloc( ) 函数、free( ) 函数在此头文件有定义 */
void main( ) /* 主函数开始 */
{
char * p ; /* 定义一个字符指针变量 p */
p = (char *)malloc(10000*sizeof(char) ) ; /* 为 p 分配一块大小为 10000 个字节的内存,因为 sizeof(char) 的值为 1,故 malloc 分配的总大小为:10000 */
if( p == NULL ) /* 该语句绝对不能够省略,如果分配内存失败(即:返回 NULL),则立即退出应用程序,此时根本就不需要使用 free( ) 进行释放内存 */
{
printf("Memory allocation failured !\n") ; /* 输出:内存分配失败 */
exit(1) ; /* 立即退出应用程序 */
}
strcpy( p , "This is a test string !!!\n" ) ; /* 如果内存分配成功的话,往变量 p 中拷贝一个字符串 */
printf("%s\n", p) ; /* 将拷贝到 p 中的字符串显示在屏幕上 */
free( p ) ; /* 此时在退出应用程序之前,一定要记得使用 free( ) 函数释放刚才成功分配到的内存 */
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询