表示结构缓冲区的高效且不容错误的方法?

时间:2013-10-10 16:16:42

标签: c memory-management buffer binary-data

假设我希望符合以下结构中列出的内存模型(作为某些文件中的二进制数据):

typedef struct fileSection_s {

    unsigned int a[ 3 ];

    unsigned int b[ 3 ]; 

} fileSection_t;

有任意数量的fileSection_t结构,并且使用C,我想知道一种有效且不容易出错的方法:

  • 将任意数量的fileSection_t结构分配为缓冲区,而不采取容易出错的事情(?),例如:
    fileSection_t** buf = (fileSection_t**) malloc( sizeof( fileSection_t* ) * count);
    (即避免使用)可能的双指针)
  • 使用memcpy将从文件读取的uint8_t*预先计算的二进制数据段带入所述缓冲区,这意味着保留nfileSection_t个结构实例。
  • 稍后(逐个)访问所述fileSection_t个实例,而不是某些通用缓冲区类型(例如void*uint8_t*),而是{{1 (指针算术/转换可能?)。

对普通方法的解释或众所周知的“最佳实践”也将受到赞赏。

我的主要目标是基本上定义某种常见的类似C的接口,它允许我分配一些任意类似缓冲区的对象并存储我想要的任何类型的结构内存,而不会失去迭代的灵活性和什么不...而且通过使用fileSection_t*机制获得了类似的效果,尽管没有第二个指针。

例如,

pointer-to-pointer

所以,我希望能够做的是获取缓冲区的一部分并以安全方式转换为指向fileSection_t 的指针。该功能与数组完全相同,但在这种情况下获取所述功能(至少是AFAIK)的方法包括使用指针算法和字节转换。

1 个答案:

答案 0 :(得分:1)

我不确定这是否能回答您的问题但是在StackOverflow上,似乎使用malloc的公认惯例是

type *ptr = malloc(sizeof(*p))

type *array = malloc(sizeof(*array) * n)

sizeof()中没有类型且没有强制转换。这是使用malloc的最不容易出错的方式。