项目中尝试在调用函数内malloc分配空间后在主函数中判断。第一次不用指针返回值,发现行不通,因为函数内部分配空间在都是在栈空间内,返回后全部释放。
#include <iostream>
#include <stdlib.h>
using namespace std;
void MallocTest(uint8_t*InBuff)
{
InBuff = (uint8_t*) malloc(sizeof(uint8_t));
cout<<"In is Success"<<endl;
}
int main()
{
uint8_t* buf = NULL;
MallocTest(buf);
if(buf != NULL)
cout<<"out is Success"<<endl;
}
如上不能得到想要的结果。
解决办法:
1、 char* fun( char *), 即返回指针的形式
2、二维指针传值
void MallocTest(uint8_t**InBuff)
{
*InBuff = (uint8_t*) malloc(sizeof(uint8_t));
cout<<"In is Success"<<endl;
}
int main()
{
uint8_t* buf = NULL;
MallocTest(&buf);
if(buf != NULL)
cout<<"out is Success"<<endl;
}
如上解决办法,但会存在内存泄露的问题。待解决。
另附部分malloc拾遗:
用malloc动态分配内存后一定要判断一下分配是否成功,判断指针的值是否为NULL。
动态分配成功后,指针就不为NULL
内存分配成功且初始化后使用时别越界了。
内存使用完后要用free(p)释放,注意,释放后,p的值是不会变的,仍然是一个地址值,仍然指向那块内存区,只是这块内存区的值变成垃圾了。为了防止后面继续使用这块内存,应在free(p)后,立即p=NULL,这样后面如果要使用,判断p是否为NULL时就会判断出来。