函数:malloc()和free()、calloc()和free()
创建一个数组有三种方法:
1.声明一个数组,声明时用常量表达式指定数组的维数,然后可以用数组名访问数组元素。int example[10];
2.声明一个变长的数组,声明时用变量表达式指定数组维数,然后用数组名来访问数组元素。int example[n];
3.声明一个指针,调用malloc(),然后使用指针来访问数组元素。double *example;example=(double *)malloc(30*sizeof(double));
对应每一个malloc()调用,应该调用一次free()。函数free()的参数是先前malloc()返回的地址,它释放先前分配的内存。所分配内存的时间村调用malloc()分配内存开始,到调用free()释放内存以供再次使用。free()的参数应该是一个指针,指向由malloc()分配的内存块,不能使用free()来释放由其他方式分配的内存,在头文件stdlib.h中有malloc()和free()的原型,
通过使用malloc(),程序可以在运行时决定需要多大的数组并创建它,同时stdlib.h中还有exit()函数的原型,用来在内存分配失败时结束程序。
free()的重要性
如果程序使用了malloc()之后就一直没有使用free()来释放内存,虽然指针会作为一个自动变量消失,但它所指向的内存任然存在,我们无法访问这些内存,因为地址不见了,由于没有调用free(),不可以再使用它,这样的话,如果循环调用malloc()而不使用free()最终会导致内存溢出,这类问题被称为内存泄露(memory leak),可以通过在函数末尾调用free()放置该问题出现。
calloc():
long * newmen;
newmen=(long *)calloc(100,sizeof(long));
函数calloc()还有一个特性:他将块中的全部位置都置为0(然而要注意,在某些硬件系统中,浮点值0不是用全部位为0来表示的)。
函数free()也可以释放由calloc()分配的内存。