指针常遇到的问题

17 篇文章 1 订阅

指针是个涉及到内存,很容易产生bug的根源,总结了几点指针容易出错的问题:

1、对于多级指针,不要在多个函数中分配内存空间,例如:

void func(char** p){
    for(int i = 0; i < 5; i++){
        p[i] = (char*)malloc(sizoef(char) * 100);
    }
}

int main(){
    char** p = NULL;
    p = (char**)malloc(sizeof(char*) * 10);
}

上面这段代码就是现在main函数中对p指向的空间开辟了一段内存,然后又在func函数中开辟了二级内存,这样在项目开发中是坚决不能出现的,难于维护,难于维护,难于维护,重要的事情说三遍。因为不好释放内存,在main中或者func中释放都不合适。

2、判断内存是否分配成功

若内存没有分配成功,就去操作自以为分配成功的内存,一操作就绝对down掉

3、不能操作NULL空间

跟第二条类型,在操作指针所指向的内存空间时一定要判断是否为NULL,NULL空间时系统保护的内存空间,不准用户操作

4、内存泄漏

这个就不用说了,初学者常犯的错误,总忘记释放内存,另外重点是可能一段代码中分配好几段内存,前面都申请成功了,后面有一个申请失败,那么前面申请的都要释放掉再进行后面的操作或者处理,否则就内存泄漏了。

5、野指针

野指针也是个初学者常犯的错误,释放完内存空间后,一定要让指针指向NULL,否则就变成野指针了,这个就不用说了。

6、(*p)++ 与 *p++

一定要区分(*p)++ 与 *p++两者的区别,一个是指针指向的内存空间里的值加1,一个是指针的地址加1。这也是经常出现bug的一个地方。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值