如何将可变大小的 void 指针存储在一个指针数组中?

Posted

技术标签:

【中文标题】如何将可变大小的 void 指针存储在一个指针数组中?【英文标题】:How to store void pointers of variable size in one single pointer array? 【发布时间】:2015-08-24 05:51:34 【问题描述】:

我有一个看起来像这样的代码

  void * mypointer;
  void * array = malloc(sizeof(void*)*10)
  loop
       mypointer = malloc(some random size);
       memset(mypointer,start,end)
       array[i++] = mypointer++
   

现在这是抛出一个异常

  'void*' is unknown size for array and 'void' illeagal with all types

编辑

我也尝试使用 ** 数组,但它也会引发异常。

【问题讨论】:

void * 的大小没有变化...但void * array 将指向没有大小的void,而不是void * 那么如何解决这个问题呢?我有点卡住了,需要有这些随机大小的 void 指针的起始地址数组,因为我稍后会使用它。 【参考方案1】:

由于array 应该是一个指针数组,所以使用:

void ** array = malloc(sizeof(void*)*10)

当你使用

void* array = ...

您不能像在下一行中那样索引array

array[i++] = mypointer++;

记住

array[k] = *(array+k);

只有当sizeof(*array) 可以被确定时,array+k 才能被评估。 sizeof(*array) 无法确定 array 是否属于 void* 类型。

【讨论】:

我所做的是 void ** array = (void *)malloc(sizeof(void)*10) 仍然在 array[i++] = mypointer++ that void * 大小未知 @niyant sizeof(void) 没有意义。 sizeof(void*) 如果你想要指向 void 的指针的大小 那么在这种情况下你如何索引**myarray??

以上是关于如何将可变大小的 void 指针存储在一个指针数组中?的主要内容,如果未能解决你的问题,请参考以下文章

可变大小数组和指针之间的区别? [复制]

在 C 中初始化指针数组 - 可变大小的对象可能未初始化

如何制作具有动态大小的数组?动态数组的一般用法(也可能是指针)? [关闭]

如何通过指针获取数组的大小? [复制]

对 C 字符串数组使用简单的 void 指针

将内存和存储分配到指针中