zoukankan      html  css  js  c++  java
  • 使用指针时应注意的问题

    指针是一柄双刃剑,用得好所向披靡,用得不好搬石头砸自己的脚。使用指针时尤其要注意,稍有不慎就会让程序崩溃,根据自己的学习使用即碰到的问题总结于下,只是个人见解,当然只是一叶障目,指针的博大精深还有待我去发掘。

    1.定义指针后要将其初始化

    所谓的初始化就是将指针指向具体的位置,若指针不指向任何位置就赋为NULL,不能让指针为一个野指针。如下

    int *p;

    p=NULL ;  //或者指向一个地址p=&a

    如果是类中的全局变量就在构造函数中初始化,如果是局部变量就在定义了后立即初始化

    2.给指针分配了内存空间引用时一定要注意大小

    比如定义了int型指针p

    p = new int[100];

    在引用p[i]时,i一定不能大于99,否则会出现访问越界

    3.要记得释放指针内存空间

    在需要释放指针内存空间时(不需要使用该指针或需要重新分配内存空间时),一定要将其释放,然后再赋予NULL

    delete []p;

    p=NULL;

    4.特殊情况

    对于一些局部变量的指针,如果分配了内存空间,照理说用完后就要释放掉,但在有些情况下,比如某些对象与该指针有关系时,释放掉内存空间后在使用对象时反而会让程序崩溃,这时就不用管指针了

    比如:

    QImage *image;  //全局变量

    unsigned char* data = new unsigned char[bytePerLine * imageY]; //局部变量

    image = new QImage(data,imageX,imageY,bytePerLine,QImage::Format_RGB888);

    这时image对象就与data有关,如果delete掉data,再使用image时程序就会崩溃(为什么会这样,一时还没弄明白)

    5.不正当使用的典型问题

    不正确使用指针往往会出现一些意想不到的问题,最典型的就是地址访问冲突,出现这种问题首先检查指针

  • 相关阅读:
    springMVC+spring+mybatis整合(包括文件上传和下载)
    mybatis spring 框架整合
    Java AOP 注解配置与xml配置
    Java 实现分页功能
    Arcanist安装使用流程
    Swift 添加KVO
    swift 混编OC instanceType 标识的方法找不到
    Swift UIStackView代码使用
    Swift
    swift 相册PHAssetCollection,PHAsset
  • 原文地址:https://www.cnblogs.com/Romi/p/2435456.html
Copyright © 2011-2022 走看看