c语言malloc分配
2014-04-30 15:08
357 查看
项目中尝试在调用函数内malloc分配空间后在主函数中判断。第一次不用指针返回值,发现行不通,因为函数内部分配空间在都是在栈空间内,返回后全部释放。
如上不能得到想要的结果。
解决办法:
1、 char* fun( char *), 即返回指针的形式
2、二维指针传值
如上解决办法,但会存在内存泄露的问题。待解决。
另附部分malloc拾遗:
用malloc动态分配内存后一定要判断一下分配是否成功,判断指针的值是否为NULL。
动态分配成功后,指针就不为NULL
内存分配成功且初始化后使用时别越界了。
内存使用完后要用free(p)释放,注意,释放后,p的值是不会变的,仍然是一个地址值,仍然指向那块内存区,只是这块内存区的值变成垃圾了。为了防止后面继续使用这块内存,应在free(p)后,立即p=NULL,这样后面如果要使用,判断p是否为NULL时就会判断出来。
#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时就会判断出来。
相关文章推荐
- C++中,如何执行一个控制台命令并返回结果到字符串string中
- win7下安装vc++6.0以及解决vc++6.0与office的兼容性问题的方法
- c++基础知识拾遗
- 关于随机数的笔记
- c#与C++类型转换
- C++之练习题6
- vs2010查看dll导出接口
- c++中Socket通信函数之select
- Ternary Search Tree C++实现
- C++之练习题5
- 移植android ndk c++各种兼容性问题
- C语言字符串函数大全
- C++之练习题4
- 【C语言】10-字符和字符串常用处理函数
- C++基础--完善Socket C/S ,实现客户端,服务器端断开重连
- C++之练习题3
- C++之练习题2
- VC++ WIN32 sdk实现按钮自绘详解.
- C语言字符串函数大全
- C++之练习题1