C指针开辟内存空间
动态内存管理
使用malloc,calloc函数动态开辟内存空间,但要注意使用后要使用free函数进行释放。
方式一:动态开辟内存
#include <stdio.h>
int* getSpace()
{
//开辟5个连续的int大小的内存
int* p = malloc(sizeof(int) * 5);
if (p == NULL)
{
return;
}
//赋值
for (int i = 0; i < 5; i++)
{
p[i] = i + 100;
}
//返回开辟好的内存指针
return p;
}
void test()
{
int* p = getSpace();
for (int i = 0; i < 5; i++)
{
printf("%d\n", p[i]);
}
//手动开辟 手动释放
free(p);
//避免出现野指针
p = NULL;
}
方式二:动态开辟内存
//高一级的指针
void allocateSpace(char** pp)
{
//开辟100个内存
char* temp = malloc(100);
//全部赋值为0
memset(temp, 0, 100);
//复制"hello world"到temp
strcpy(temp, "hello world");
*pp = temp;
}
void test()
{
char* p = NULL;
allocateSpace(&p);
printf("%s\n", p);
if (p != NULL)
{
free(p);
p = NULL;
}
}
给指针进行开辟内存时,被调函数不能使用同级指针,要使用指针的地址(高一级的指针),被调函数接收这个地址后再进行内存开辟。即 主调函数没有分配内存,被调函数需要用更高级的指针去修饰低级指针,进行分配内存
以下方式错误
void allocateSpace(char* pp)
{
char* temp = malloc(100);
memset(temp, 0, 100);
strcpy(temp, "hello world");
pp = temp;
}