一级指针(char *)易错模型分析
(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语言中,栈中可以分配内存,但是在栈中分配的内存,一离开其作用区域,就会被释放了,特别要注意这一点,比如说要在栈中分配数组内存的地方,一定要格外小心。
还没有评论,来说两句吧...