memset & malloc

memset & malloc 的使用

1. void * memset(void *s, int ch, size_t n) 

    定义了数组WORD data[64].

    先开始想用memset初始化数组: memset(data, 1746, sizeof(WORD)*64);  hex(1746)=06 D2;初始化后打开数据文件发现如图结果:

            


于是查了memset的描述,发现memset 是字节为单位来初始化内存,而WORD占用两个字节,因此memset 只将高位的D2进行了操作因此结果如图,最后还是使用了循环赋值,得到了正确结果


2. void * malloc(unsigned int num_bytes)

    malloc 可用于动态分配内存, 内存使用结束后必须使用free()进行释放,否则会引起内存泄露。

    一般进程运行的内存资源在“栈”中,这部分资源在进程结束后会自行释放回收。而malloc分配的内存为系统 “堆”区的空闲内存,该部分内存必须手动释放,其占用资源并不属于该进程,因此不会自行释放。

    char str[20]; 与 

    char * str; str = (char *)malloc(20* sizeof(char));  free(str);

    的区别在于, 前者所需要的内存资源在程序编译时已经申请,并算在了该进程的栈区所占资源内其大小已知。而后者所需要的内存资源是在进程开始后动态分配的,其大小在编译时是未知的。

    因此对于两条语句分别调用sizeof(str) 前者得到 20, 后者得到4(为指针大小并非实际分配内存大小)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值