一级指针(char *)易错模型分析

小鱼儿 2023-06-09 03:50 94阅读 0赞

(1) char *(字符串)做函数参数出错模型分析

比如代码如下:

  1. void copy_str21(char *from, char *to)
  2. {
  3. if (*NULL = '\0' || *to!=’\0’) //红色的地方会出错,因为别人可能将null传给from指针
  4. {
  5. Printf(“func copy_str21() err\n”);
  6. return;
  7. }
  8. for (; *from!='\0'; from++, to++)
  9. {
  10. *to = *from;
  11. }
  12. *to = '\0';
  13. }
  14. //字符串逆序
  15. int main()
  16. {
  17. //char p[1024] ={0};
  18. char *p ={0}; p = NULL;
  19. char to[100];
  20. copy_str21(p, to);
  21. }

注意,如果传给from指针的是null, 那么在使用*from的时候就会出错,因为,需要先判断from是不是null. 总之,不要相信主调函数给你传的内存空间。

(2) 越级 (语法级别的越界)

举个例子,比如:

char buf[3] = “abc”; //定义成buf[4]才对,因为这是字符串初始化字符数组,默认加’\0’(c风格的字符串)

(3) 不断修改指针变量的值

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RpYW5ndWl5dXl1_size_16_color_FFFFFF_t_70

这个free(a)会出现问题,因为a已经不是指向这块内存区域的首地了,很多时候,这是产生bug的根源

(4) c语言中栈中分配的内存

注意, c语言中,栈中可以分配内存,但是在栈中分配的内存,一离开其作用区域,就会被释放了,特别要注意这一点,比如说要在栈中分配数组内存的地方,一定要格外小心。

发表评论

表情:
评论列表 (有 0 条评论,94人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C++ 一级指针和二级指针

    C++ 一级指针和二级指针 一级指针就是指向普通对象的指针,就是内存地址,二级指针就是指向指针的指针,就是地址的地址:打个比方,你有一个箱子A(相当于代码中的