c - Malloc 用于 void 指针数组的单个元素

标签 c arrays pointers

我必须使用通用类型。现在为 INT、FLOAT、DOUBLE、STRING。

让我们看看字符串。

我的数组是这样定义在字符串菜单中的。

char** Arr = (char**)malloc(number_of_strings * sizeof(char*));

现在我必须在这个数组中复制我的 BST 字符串。 所以调用我的迭代函数

pAlbero* A 是我指向 BST 节点的指针。

i 由 0 传递。

size 是我的 sizeof(type)

Copy是一个基于要复制的类型的回调函数。

void* copia_albero_in_array_ordinato_iter(pAlbero* A, void* Arr, int* i,
    int size, FNCOPY Copy)
{
  pStack* st = NULL;
  pAlbero* T = A;
  void* elemento;
  while (st || T)
  {
    if (T)
    {
      st = push(st, T);
      T = T->sx;
    }
    else
    {
      T = top(st);
      st = pop(st);
      elemento = malloc(size);
      Copy(elemento, T->val);
      copia_dato(Arr, *i, elemento, 0, sizeof(elemento));
      free(elemento);
      T = T->dx;
      *(i) = *(i) + 1;
    }
  }
  return Arr;
}

void copia_dato(void* dest, int d_pos, void *source, int s_pos, int dim)
{
  void *dst_addr = dest + (d_pos * dim);
  void *src_addr = source + (s_pos * dim);
  memcpy(dst_addr, src_addr, dim);
}

我是 C 的新手,基本上我已经为我的数组分配了内存,但是我如何为其中的单个字符串单元格分配内存? 打印阵列工作正常。 在此先感谢您,如果我遗漏了一些内容,我深表歉意。


[评论更新]

Arr[i] = ... 

给我:

array subscript is not an integer

Arr[*i] = ... 

给我:

[Warning] dereferencing `void *' pointer, 4 invalid use of void expression 

最佳答案

[Warning] dereferencing `void *' pointer, 4 invalid use of void expression 

如果你声明

..., void * Arr, ...

Arr 是指向 void 的指针,将 [] 运算符应用于 Arr 是隐式取消引用和将导致 void 类型的对象。后者不存在。这就是编译器提示的原因。

关于c - Malloc 用于 void 指针数组的单个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24342999/

相关文章:

python - 库例程和协程

c - 寻找回文

Javascript将对象插入数组

c - 将指针作为参数传递给其他 .c 文件

c++ - 指针弄乱数组元素的地址

c - 如何从C字符串中获取第一个字母?

c - 将数据文件作为链表中的节点读取的函数

javascript - 如何在 Javascript 中将对象检索到数组中?

java.lang.ArrayStoreException 在整数数组中存储整数

c - 警告 : assignment makes pointer from integer without a cast [-Wint-conversion] p = (i + 1) * 100;