动态内存函数

动态内存函数

1. mallocfree

 

Malloc:向内存申请一块连续可用的空间。

Void*malloc(size_t size)//如果参数size0,则函数的标准未定义

Free:释放所申请的动态内存空间。

#include "stdio.h"

#include "windows.h"

int main()

{

int num = 0;

scanf_s("%d", &num);

int arr[] = { 0 };

int *ptr = NULL;

ptr = (int *)malloc(num*sizeof(int));//开辟一段空间如果开辟成功,则指向

那段空间;

if (NULL != ptr)

{

int i = 0;

for (i = 0; i < num; i++)

{

*(ptr + i) = 0;

}

}

printf("%p\n", ptr);

    free(ptr);//释放ptr所指向的动态内存,空间已经归还计算机

printf("%p\n", ptr);

ptr = NULL;//ptr指向的内存已经无效即相当于开辟空间失败,则,返回NULL指针,所以malloc返回值一定要检查

system("pause");

return 0;

}

由运行结果可以看出,释放前和释放后,ptr所指向的地址相同,只是释放后变得无效。

2. calloc函数

 

Void *calloc(size_t num,size_t size)

num 个大小为size的元素开辟一段空间,将size个字节初始化为0.

#include "stdio.h"

#include "windows.h"

int main()

{

int *ptr = (int *)calloc(10,sizeof(int));//开辟一段空间

if (NULL != ptr)

{

}

printf("%p\n", ptr);

    free(ptr);//释放ptr所指向的动态内存,空间已经归还计算机

printf("%p\n", ptr);

ptr = NULL;//ptr指向的内存已经无效

system("pause");

return 0;

}

Callocmalloc函数的作用基本相同,但是在返回地址之前会将申请到的空间里的每个字节初始化为0

3. Realloc函数

Realloc: 对动态开辟内存大小可以调整

Void *realloc (void *ptr ,size_t size)

include "stdio.h"

#include "windows.h"

int main()

{

int *ptr = malloc(100);//开辟一段空间

if (NULL != ptr)

{

}

else

{

exit(EXIT_FAILURE);

}

int *p = NULL;

ptr = realloc(ptr, 1000);//将要申请的内存空间扩展1000;但是可能会出现内存泄漏

if (NULL != ptr)

{

p = ptr;

}

free(p);//释放ptr所指向的动态内存,空间已经归还计算机

    system("pause");

return 0;

猜你喜欢

转载自blog.csdn.net/ning_zhi_t/article/details/78634441