C语音有个原则,手动申请的内存一定要手动释放!
我们先看一个简单的实例
#include <iostream>
void main(void)
{
char* buf = NULL;
char hello[]= "hello,world";
int len = 0;
len = sizeof(hello);
//手动申请一块内存
buf = (char*)malloc(sizeof(char) * len);
//手动申请的内存一定要初始化
memset(buf, 0, len);
memcpy(buf, hello, len);
printf("The buffer is %s\n",buf);
//手动申请的内存一定要手动释放
if(buf != NULL)
{
free(buf);
//把指针重新指向0处防止野指针
buf = NULL;
}
}
下边看一个从一个函数调用一个函数申请内存的例子
#include <iostream>
char* GetMemery(int);
void main(void)
{
char* buf = NULL;
char hello[]= "hello,world";
int len = 0;
len = sizeof(hello);
//手动申请一块内存
buf = GetMemery(len);
//手动申请的内存一定要初始化
memset(buf, 0, len);
memcpy(buf, hello, len);
printf("The buffer is %s\n",buf);
//手动申请的内存一定要手动释放
if(buf != NULL)
{
free(buf);
//把指针重新指向0处防止野指针
buf = NULL;
}
}
char* GetMemery(int size)
{
char* pTemp = NULL;
pTemp = (char*)malloc(sizeof(char) * size);
return pTemp;
}
或者也可以用下边的方法
void GetMemery(char**, int);
void main(void)
{
char* buf = NULL;
char hello[]= "hello,world";
int len = 0;
len = sizeof(hello);
//手动申请一块内存
GetMemery(&buf,len);
//手动申请的内存一定要初始化
memset(buf, 0, len);
memcpy(buf, hello, len);
printf("The buffer is %s\n",buf);
//手动申请的内存一定要手动释放
if(buf != NULL)
{
free(buf);
//把指针重新指向0处防止野指针
buf = NULL;
}
}
void GetMemery(char**pStr, int size)
{
*pStr = (char*)malloc(sizeof(char) * size);
}
最后还有一种方法
void GetMemery(char*&, int);
void main(void)
{
char* buf = NULL;
char hello[]= "hello,world";
int len = 0;
len = sizeof(hello);
//手动申请一块内存
GetMemery(buf,len);
//手动申请的内存一定要初始化
memset(buf, 0, len);
memcpy(buf, hello, len);
printf("The buffer is %s\n",buf);
//手动申请的内存一定要手动释放
if(buf != NULL)
{
free(buf);
//把指针重新指向0处防止野指针
buf = NULL;
}
}
void GetMemery(char* &pStr, int size)
{
pStr = (char*)malloc(sizeof(char) * size);
}