我有一个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]);