指针申请内存空间
1)malloc()函数功能分配所需的内存空间,并返回一个指向它的指针。
void *malloc(size_t size);
size:内存块的大小,以字节为单位。
2)calloc()函数功能分配所需的内存空间,并返回一个指向它的指针,且设置分配的内存为零。
void *calloc(size_t nitems, size_t size);
nitems:元素个数;
size:元素大小。
3)realloc()函数功能尝试重新分配的已经申请的内存空间大小。
void *realloc(void *ptr, size_t size);
ptr:指针指向一个要重新分配内存的内存块;
size:内存块的新的大小,以字节为单位。
释放内存空间
在程序运行完成之前,free函数释放掉所申请的内存空间。
free()函数功能释放之前调用calloc()、malloc()或realloc()所分配的内存空间。
void free(void *ptr);
ptr:指针指向一个要释放内存的内存块。
示例
1)malloc():
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char *str;
/* 最初的内存分配 */
str = (char *) malloc(15);
strcpy(str, "runoob");
printf("String = %s, Address = %u\n", str, str);
if(NULL != str)
{
free(str);
//避免指针问题(野指针)
str = NULL;
}
return(0);
}
2)calloc()
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, n;
int *a;
printf("要输入的元素个数:");
scanf("%d",&n);
a = (int*)calloc(n, sizeof(int));
printf("输入 %d 个数字:\n",n);
for( i=0 ; i < n ; i++ )
{
scanf("%d",&a[i]);
}
printf("输入的数字为:");
for( i=0 ; i < n ; i++ ) {
printf("%d ",a[i]);
}
if(NULL != a)
{
free(a);
//避免指针问题(野指针)
a= NULL;
}
return(0);
}
3)realloc()
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *str;
/* 最初的内存分配 */
str = (char *) malloc(15);
strcpy(str, "runoob");
printf("String = %s, Address = %p\n", str, str);
/* 重新分配内存 */
str = (char *) realloc(str, 25);
strcat(str, ".com");
printf("String = %s, Address = %p\n", str, str);
if(NULL != str)
{
free(str);
//避免指针问题(野指针)
str = NULL;
}
return(0);
}