美文网首页
库开发应使用二维指针数组

库开发应使用二维指针数组

作者: Brent姜 | 来源:发表于2018-01-09 11:57 被阅读9次

起源:

TFZQ的 HDF5 库,读取一个文件的函数中,需要传入一个buffer,是一个一维指针,形如:

HDF5GetData(int& num, void* buffer);

而同事在使用该库的时候,是首先将数据读取出来,放到一个Queue中,然后另一个线程读取这个Queue然后解析数据。形如:

// 数据读取函数:
void reader()
{
    T buffer[MAX_LEN];
    int num;
    HDF5GetData(num, buffer);
    for(int i=0; i<num; ++i){
        queue_.push(&buffer[i]);
    }
}

// 数据处理函数:
void processor()
{
    do{
        T* item = queue_.pop();
        // handle item data
        // ...
    }while(true);
}

这样的程序会导致异常。我帮助解决了问题,解决代码如下:

// 数据读取函数:
void reader()
{
    T buffer[MAX_LEN];                              // <-- first memory allocation
    int num;
    HDF5GetData(num, buffer);
    for(int i=0; i<num; ++i){
        auto newitem = new T();
        memcpy(newitem, &buffer[i], sizeof(T));     // <-- create a new buffer! 2nd memory allocation
        queue_.push(newitem);                       // <-- use it!
    }
}

// 数据处理函数:
void processor()
{
    do{
        T* item = queue_.pop();
        // handle item data
        // ...
        delete item;                                // <-- delete 
    }while(true);
}

这样的话等于是对同一个对象进行了两次内存分配操作。

如果HDF5GetData改为如下的形式:

HDF5GetData(int& num, void** buffer);

这样的话,就可以在HDF5库中分配好指向指针的数组。

// 数据读取函数:
void reader()
{
    T* buffer[MAX_LEN];
    int num;
    HDF5GetData(num, &buffer);                      // <-- first and only once memory allocation
    for(int i=0; i<num; ++i){
        queue_.push(buffer[i]);                     // <-- use it!
    }
}

// 数据处理函数:
void processor()
{
    do{
        T* item = queue_.pop();
        // handle item data
        // ...
        delete item;                                // <-- delete 
    }while(true);
}

相关文章

  • 库开发应使用二维指针数组

    起源: TFZQ的 HDF5 库,读取一个文件的函数中,需要传入一个buffer,是一个一维指针,形如: HDF5...

  • 数组_for

    使用范围for进行遍历二维数组: 使用指针for遍历

  • 指针与数组

    原文1原文2一、数组指针(也称行指针) 定义: int (* p)[n];将二维数组赋给一指针,应这样赋值: 所以...

  • 数组指针和指针数组

    1.数组指针(又称行指针) 二维数组赋给一指针时: 2.指针数组 二维数组赋给一指针数组: 小结:数组指针只是个指...

  • 2017年10月18日学习总结

    今天学习了指针数组,对于一个二维数组就可以看成一个指针数组,使用指针数组是要考虑地址,考虑指针所指向的类型,当指针...

  • 二维数组和指针

    二维数组和指针 ⑴用指针表示二维数组元素。 要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。 一...

  • 二维数组与指针、指针数组、数组指针的用法

    二维数组和指针⑴ 用指针表示二维数组元素。要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。我们知...

  • 指针数组-访问二维数组

    用指针数组访问二维数组

  • 2018-05-24

    5月24日 上课的第十八天。主要讲了指针与二维数组,要注意二维数组名字与地址的关系,注意指针符号*与取地址符&的应...

  • 2019-08-28(二级指针和二维数组)

    一个二级指针**p和二维数组arr 指针数组 code

网友评论

      本文标题:库开发应使用二维指针数组

      本文链接:https://www.haomeiwen.com/subject/lfpwnxtx.html