malloc 和 realloc 的使用。
来源:互联网 发布:冢原卜传 知乎 编辑:程序博客网 时间:2024/05/17 03:39
最近应美国运营商的需求写一个程序,需要从高通log中解析手机语音和数据的注册信息,显示到组件上。
解析出的信息要写入一个字符串中。在给字符串分配内存空间时,遇到一些小问题。
1) malloc 函数
void *
malloc
(unsigned
int
num_bytes);
malloc 函数向内存中申请num_bytes 数量的内存块,并返回一个内存块的首地址。
比如 以下语句定义了一个字符串, 字符串包含1024个字节, 首地址为a.
char* a=Null;
a= (char *) malloc(1024);
2) realloc
void *realloc(void *mem_address, unsigned int newsize);
realloc 的功能是内存的扩展, 一般是用在当申请的旧的内存空间不够使用的时候。
它会首先申请一块newsize 大小的内存, 然后将*mem_address 指向的数据拷贝到 新申请的内存空间中,并返回新的内存空间的首地址。
我在程序调试的过程中, 遇到的问题是。
首先申请了一块内存存放PDP 信息。
mem_size = 2+ 3*(param->pdn_address.pdn_addr_len-1) + 4; char* data_msg = (char*)malloc(mem_size);
log :pdn address info data_msg 1;10,218,74,196;
但是当我扩展data_msg, 并向其追加apn 信息的时候, 我发现出现了data_msg 中信息反而被截断的情况。
mem_size+=param->access_point_name.apn_addr_len+1;
data_msg = (char*)realloc(data_msg,mem_size);
....
log :pdn address info and apn data_msg 1;10,218c
追加内存以后, data_msg 显示的信息反而更短了。
看到这种情况, 我开始以为是因为机器内存空间不足, realloc 扩展空间失败,造成的。
但是实际上是因为当扩展内存的时候, mem_size 不够大,当写入apn 的时候,内存空间不够大, 造成内存空间混乱造成的。
此时内存无法从内存中正确读出数据, 所以显示的数据被截断。
也就是说, 如果有你扩展的空间不够, 出现的现象并不是你追加的数据显示不全, 而是在存贮在内存中的数据完全混乱,出现随机的错误。
- malloc和realloc的使用
- malloc 和 realloc 的使用。
- malloc、calloc、realloc的使用和区别
- malloc和realloc的用法
- malloc(),calloc(),realloc()使用的一点经验
- 内存管理,malloc,calloc,realloc的使用
- malloc realloc calloc 的区别和联系
- malloc(),calloc()和realloc()函数的区别
- C++中malloc和realloc的意义
- malloc realloc calloc 的区别和联系
- malloc realloc calloc 的区别和联系 .
- malloc、realloc和calloc的区别
- malloc、realloc和calloc的区别
- malloc、realloc和calloc的区别
- malloc、realloc和calloc知识的整理
- calloc,malloc和realloc
- realloc、calloc和malloc
- malloc和realloc
- C# 子窗体在父窗体中显示位置
- 33
- 02.加入GitHub
- 小博老师解析经典Java面试题-redirect和forward的区别
- Servlet 过滤器
- malloc 和 realloc 的使用。
- 333
- NodeJs学习笔记 01 -- 入门之模块、全局对象
- Leetcode-141. Linked List Cycle
- UINavigation的一些常用用法(持续更新-2016年10月27日)
- elasticsearchyu-solr
- 深化管理、提升IT的数据平台建设方案
- Java中的基本类型与包装类型
- HOG:从理论到OpenCV实践