您的位置:首页 > 编程语言 > C语言/C++

C语言编程代码分析0

2014-10-29 20:52 337 查看
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; 子函数运行结束,该函数的栈就无效了,原来的栈的内存空间可能被用作其他用途,返回这个地址的内容,可能是脏的;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: