本文共 698 字,大约阅读时间需要 2 分钟。
(1) char *(字符串)做函数参数出错模型分析
比如代码如下:
void copy_str21(char *from, char *to){ if (*NULL = '\0' || *to!=’\0’) //红色的地方会出错,因为别人可能将null传给from指针 { Printf(“func copy_str21() err\n”); return; } for (; *from!='\0'; from++, to++) { *to = *from; } *to = '\0';}//字符串逆序int main(){ //char p[1024] ={0}; char *p ={0}; p = NULL; char to[100]; copy_str21(p, to);}
注意,如果传给from指针的是null, 那么在使用*from的时候就会出错,因为,需要先判断from是不是null. 总之,不要相信主调函数给你传的内存空间。
(2) 越级 (语法级别的越界)
举个例子,比如:
char buf[3] = "abc"; //定义成buf[4]才对,因为这是字符串初始化字符数组,默认加’\0’(c风格的字符串)
(3) 不断修改指针变量的值
这个free(a)会出现问题,因为a已经不是指向这块内存区域的首地了,很多时候,这是产生bug的根源
(4) c语言中栈中分配的内存
注意, c语言中,栈中可以分配内存,但是在栈中分配的内存,一离开其作用区域,就会被释放了,特别要注意这一点,比如说要在栈中分配数组内存的地方,一定要格外小心。
转载地址:http://xmzmi.baihongyu.com/