<span style="font-size:18px;">int *p;
p=(int *)malloc(sizeof(int));
if(p!=NULL)
............................//需要执行的语句
else
............................//打印分配内存不成功出错信息</span>
注意:malloc函数申请的内存空间,如果不赋值,内存空间内存的都是垃圾数。
可以使用memset函数给malloc申请的空间进行初始化。定义函数:void * memset(void *s,int c,size_t n); 说明:memset()会将参数s所指的内存区域前n个字节以参数c填入,然后返回指向s的指针。返回值是指向s的指针。
例如程序:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[]) {
int *p,i;
p=(int *)malloc(sizeof(int)*100);
for (i=0; i<100; i++) {
printf("%d\t",*(p+i));
if(i%8==0) printf("\n");
}
printf("\n");
free(p);
return 0;
}
运行结果将有非零数。
2)calloc
格式 :calloc(块数,长度),如calloc(4,sizeof(int));语句实现分配4块内存长度为4的内存空间。这些内存空间的地址也是连续的。
注意:calloc函数自动将申请的内存空间赋值为0。
例如程序:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[]) {
int *p,i;
p=(int *)calloc(100,sizeof(int));
for (i=0; i<100; i++) {
printf("%d\t",*(p+i));
if(i%8==0) printf("\n");
}
printf("\n");
free(p);
return 0;
}
运行结果全为0。
3)realloc
格式:void *realloc(void *str,unsigned size),将str所指的已分配内存区的大小改为size,size可以比原来分配的内存空间小或大,如果重新分配内存成功则返回指向被分配内存的指针,否则返回空指针NULL。realloc可以对给定的指针所指的空间进行扩大或者缩小,原来内存中的内容将保持不变。当然如果缩小,被缩小的那一部分的内容会丢失。
注意:realloc并不保证调整后的内存空间和原来的内存空间保持同一内存地址。相反,realloc返回的指针很可能指向的一个新的地址。所以在代码中,我们必须将realloc返回的值重新赋值给一个指针变量。还需要注意的是,当内存分配成功后应将原来的指针赋值NULL,否则会形成野指针,可能会造成系统崩溃。
提示:不论是以上哪种方式申请内存,在使用完之后,都需要用free()函数将内存空间释放,以免造成内存泄漏。