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; 子函数运行结束,该函数的栈就无效了,原来的栈的内存空间可能被用作其他用途,返回这个地址的内容,可能是脏的;
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; 子函数运行结束,该函数的栈就无效了,原来的栈的内存空间可能被用作其他用途,返回这个地址的内容,可能是脏的;