我有一个 2d 缓冲区,我想将其与其他值一起传递给线程,因此我需要将其移动到结构中。当我尝试这样做时,我无法再次访问我的结构中的值,我需要一些帮助。
这是我的缓冲区:
void* mybuff[8][16384];
我想在这样的结构中存储指向此二维数组的指针:
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]);
关于c - 在 C99 的结构中分配指向二维空数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55154731/