1,指针没有指向一块合法的区域
1指针没有初始化
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h>#include <string.h>structaa{    char*pa;    charc;}ssa,*ssb;voidmain(){strcpy(ssa.pa,"abc");printf("%s \n",ssa.pa);} | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <stdio.h>#include <string.h>#include <stdlib.h>structaa{    char*pa;    charc;}ssa,*ssb;voidmain(){ssb=(structaa *)malloc(sizeof(structaa));strcpy(ssb->pa,"ac");printf("%s \n",ssb->pa);} | 
ssa 定义时 只给 pa指针分配了内存,内存没有初始化,指针指向的地址是随机的(全局变量自动初始化为0 ,局部变量不初始化,为随机值)。
malloc 只给 ssb 初始化了,没有给 pa初始化。
故访问指针指向的地址时会出现错误。
必须对指针进行初始化
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <stdio.h>#include <string.h>#include <stdlib.h>structaa{    char*pa;    charc;}ssa,*ssb;voidmain(){ssa.pa=malloc(sizeof(char));strcpy(ssa.pa,"ac");printf("%s \n",ssa.pa);} | 
2,没有分配足够的空间
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h>#include <string.h>#include <stdlib.h>structaa{    char*pa;    charc;}ssa,*ssb;voidmain(){printf("%d\n",sizeof(structaa));ssb=malloc(sizeof(int));ssb->c='D';printf("%c \n",ssb->c);printf("address of ssb ->%d\n",ssb);printf("address of ssb.pa ->%d\n",ssb->pa);printf("address of ssb.c ->%d\n",&(ssb->c));} | 
书上说的例子好像不太对。
结构体为指针加char 按照4字节对齐需要8字节的空间。
malloc了4个字节的空间,依然可以访问。

书上的例子的错误是结构体内的指针没有初始化,而不是空间分配太小。
但是从规范上来说应该:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <stdio.h>#include <string.h>#include <stdlib.h>structaa{    char*pa;    charc;}ssa,*ssb; voidmain(){ssb=(structaa *)malloc(sizeof(structaa));ssb->c='D';printf("%c \n",ssb->c);} | 
3.
| 1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h>#include <string.h>#include <stdlib.h>voidmain(){char*pa="abcdefg";char*pb;pb=malloc(sizeof(char));strcpy(pb,pa);printf("%s \n",pb);} | 

不知道是编译器不符合规范还是其他原因。依旧不会出错。
4 数组越界
| 1 2 3 4 5 6 7 | #include <stdio.h>voidmain(){intpa[3]={1,2,3};printf("%d \n",pa[4]);} | 
GCC对数组越界不进行任何处理,没有错误警告。

5 内存泄漏
内存要及时 free
6 内存释放
1。free后依然可以通过指针变量访问内存,要将 指针变量 p=NULL
2.在子函数中内部定义了一个数组,函数返回数组的指针。子函数中定义的数组,在函数返回时会自动销毁,返回的指针指向数组的内存,
3,内存使用太复杂,不知道那块已释放,那块未释放。
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号