C语言编程代码分析0

1. #include "stdlib.h"


2. char* test(char *ptr)
3. {
4. unsigned char i;
5. char buf[8*1024];
6. char *p, *q;
7.
8. 
9. for(i = 0; i <= 8*1024; i++)
10. {
11. buf[i] = 0x0;
12. }
13.
14. p = malloc(1024);
15. if(p == NULL)
16. return NULL;
17. q = malloc(1024);
18. if(q = NULL)
19. return NULL;
20.
21. memcpy(p, ptr, 1024);
22. memcpy(q, ptr, 2048);
23. memcpy(buf, p, 1024);
24. buf = buf + 1024;
25. memcpy(buf, q, 2048);
26.
27. free(p);
28. free(q);
29.
30. return buf;
31. }




[1]include "" <> ---> ""当前文件夹then系统目录; <>系统目录




[2]unsigned char i ---> i [0, 255]; 取值范围


[3]for(i = 0; i <= 8*1024; i++)(1)死循环 (2)buf[8*1024] 不属于buf数组,写脏了内存数据


[4]buf[8*1024] 局部变量有两种存储方法
【1】简单数据类型 存放在CPU内部寄存器 因为能够存储而且提高访问速度
【2】大数据,数组,结构体等,存放在【当前】的堆栈空间内 重点是Stack 
buf[8*1024] 容易消耗堆栈空间
------>解决办法: static char buf[8*1024]; //静态变量,存放在静态存储空间,全局性




[5]p = malloc(1024); malloc()默认返回void类型指针 需要强制类型转换 (char*)


[6]if(q = NULL) ==== q = NULL; if(q); // q = NULL if(q) q始终是NULL为FALSE


[7]if(q = NULL) return NULL; 没有释放p分配的内存空间(系统堆Heap) 这就是“内存泄露”(Memory Leak) free(p);


[8]memcpy(p, ptr, 1024); 在调用memcpy()之前,需要检查ptr是否为空一定。。


[9]buf = buf + 1024; C中没有动态数组概念,数组在内存的位置在编译的时候就已经确定了,相当于buf为const 类型,只读不可修改;


[10]return buf;  子函数运行结束,该函数的栈就无效了,原来的栈的内存空间可能被用作其他用途,返回这个地址的内容,可能是脏的;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值