int main()
{
char *A="hello world";
char *B;
B = (char*)malloc(strlen(A)+1);
B = A;
free(B);
return 0;
}
A是字符串常量,B=A的地址,freeB,就相当于freeA,当然释放不掉,而且申请的动态空间,没有被释放,内存泄露啦
free 只能释放自己malloc的 内存
注意 memcpy函数 进行内存操作的时候 会出现的问题
#pragma
pack (1)
6 struct cmd
7 {
8 unsigned short sign0;
9 unsigned short crc;
10 unsigned int addr;
11 unsigned char cmd;
12 unsigned char *d;
13 };
14 #pragma pack ()
15
16
17 int main()
18
19 {
20 unsigned char b[10]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9};
21
22 int i;
23 struct cmd cmd_a;
24 // unsigned char *p;
25
26
27 cmd_a.d=(unsigned char *)malloc(15*sizeof(unsigned char));
28 memset(cmd_a.d,0,15*sizeof(unsigned char));
29
30 // ss=(struct cmd*)malloc(sizeof(struct cmd));
31 // memset(ss,0,sizeof(struct cmd));
32
33 // ss->d= (unsigned char*)malloc(10*sizeof(unsigned char));/*3.结构体指针的成员指针同样需要初始化*/
34 // memset(ss->d,0,10*sizeof())
35
36 memcpy(cmd_a.d,b,10*sizeof(unsigned char));
对 memcpy 进行拷贝之后
free(cmd_a.d)
这样就是操作错误的,内存发生了变化 ,不能释放 注意啊