使用动态内存开辟函数,可以创捷长度可变的数组大小,这样可以减少空间的浪费。
在创建可变长度的数组时,其实在C99标准下,是可以直接创建的,例如linux下gcc编译器可以通过编译命令gcc test.c -std=c99,来实现。
在vs下是不支持的,所以需要通过内存开辟函数来进行创建。
在开辟空间的时候,有可能会开辟失败,所以需要检查malloc的返回值是否为空指针,如果为空则开辟失败,同时也可以使用全局函数strerror来返回错误码,检查是什么错误。
创建完之后,使用完要通过free函数将此空间释放,但是释放完之后,p还是指向原来的空间。所以要再把p赋成空指针。防止可以通过p再此访问此空间造成破坏。
下图是整个开辟空间和归还空间的流程图,即使不归还空间,在整个程序运行完之后,该空间也会被归还给系统。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int main()
{
int* p = (int*)malloc(10 * sizeof(int));
if (p == NULL)
{
printf("%s\n", strerror(errno));
}
else
{
int i = 0;
for (i = 0; i < 10; i++)
{
*(p + i) = i;
}
for (i = 0; i < 10; i++)
{
printf("%d ", *(p + i));
}
}
free(p);
p = NULL;
return 0;
}