c++指针使用

引言:

        在实际项目中,小白往往会不注意指针的使用而导致项目的崩溃。因此,在次简单描述一下指针的使用。

简单使用:

需要注意的点:

1、使用前:

        指针一定要分配内存,判断内存是否分配成功。

2、使用时

        使用时要判断是否是有效指针,确认是有效指针后再使用。

3、使用后

        释放内存,避免悬空指针。

#include 
#include 

// 假设的结构体定义
typedef struct {
    int gain;
    float lut[256];
} ot_isp_shading_gain_lut;

int main() {
    // ===================== 1. 使用前(初始化指针) =====================
    ot_isp_shading_gain_lut* iq_shading_gain_lut = NULL; // 初始化为NULL

    // 动态分配内存
    iq_shading_gain_lut = (ot_isp_shading_gain_lut*)malloc(sizeof(ot_isp_shading_gain_lut));
    if (iq_shading_gain_lut == NULL) {
        perror("malloc failed");
        return EXIT_FAILURE; // 内存分配失败,退出程序
    }

    // ===================== 2. 使用时(安全访问指针) =====================
    // 检查是否为NULL后再使用
    if (iq_shading_gain_lut != NULL) {
        // 安全操作:写入数据
        iq_shading_gain_lut->gain = 100;
        for (int i = 0; i < 256; i++) {
            iq_shading_gain_lut->lut[i] = i * 0.1f;
        }

        // 安全操作:读取数据
        printf("Gain: %d\n", iq_shading_gain_lut->gain);
        printf("LUT[10] = %.2f\n", iq_shading_gain_lut->lut[10]);
    } else {
        fprintf(stderr, "Error: Pointer is NULL!\n");
    }

    // ===================== 3. 使用后(释放资源) =====================
    if (iq_shading_gain_lut != NULL) {
        free(iq_shading_gain_lut);  // 释放内存
        iq_shading_gain_lut = NULL; // 置NULL避免悬空指针
        printf("Memory freed.\n");
    }

    return EXIT_SUCCESS;
}

智能指针

        c++也可以通过使用智能指针,这样可以不用主动释放。

实例如下:

#include 
#include 

struct ot_isp_shading_gain_lut {
    int gain;
    float lut[256];
};

int main() {
    // 使用智能指针(自动释放内存)
    auto iq_shading_gain_lut = std::make_unique();

    // 安全访问
    iq_shading_gain_lut->gain = 100;
    std::cout << "Gain: " << iq_shading_gain_lut->gain << std::endl;

    // 无需手动释放!超出作用域后自动销毁。
    return 0;
}

你可能感兴趣的:(c++指针使用)