我有一个2d缓冲区,我想把它和其他值一起传递给一个线程,所以我需要把它移到一个结构中。当我尝试这样做时,我无法在结构中再次访问中的值,我需要一些帮助。
这是我的缓冲区:

void* mybuff[8][16384];

我想将指向这个2D数组的指针存储在如下结构中:
typedef struct  {
  int i;
  void *mybuff;
} arg_struct_t;

但是,如果我尝试访问这些值:
    arg_struct_t *args = malloc(sizeof(arg_struct_t));
    args->i = index;
    args->mybuff = mybuff;

    fprintf(stderr, "%p\n", args->mybuff[0][0]);

我得到一个错误:
main.c:104:47: warning: dereferencing ‘void *’ pointer [enabled by default]
           fprintf(stderr, "%p\n", args->mybuff[0][0]);
                                               ^
main.c:104:50: error: subscripted value is neither array nor pointer nor vector
           fprintf(stderr, "%p\n", args->mybuff[0][0]);
                                                  ^

我想我需要告诉C99更多我想放入结构中的数据的形状,但是我不能很好地找到正确的方法。我很感激你的帮助和见解。

最佳答案

编译器不知道,它必须在此计算内存中的哪个地址:

args->mybuff[0][0]

因为args->mybuff只是指向void的指针。要处理这样的表达式,编译器需要1)数组元素的大小和2)数组的至少一个维度的信息。
以下代码更正确:
typedef void* TBuff[8][16834];
TBuff mybuff;

typedef struct  {
  int i;
  TBuff * mybuff;
} arg_struct_t;

arg_struct_t *args = malloc(sizeof(arg_struct_t));
args->i = index;
args->mybuff = &mybuff;
fprintf(stderr, "%p\n", (*args->mybuff)[0][0]);

10-08 20:01