如何为双指针分配内存,它应该在f1,f2和f3中可见?

时间:2013-10-19 17:46:54

标签: c pointers memory-management

我的示例程序如下。

void function1 () {
    void **data
    function2(data);
    //Will access data here
}

void function2(void **data) {
    function3(data);
    //Will access data here
}

void function3(void **data) {
    //Need to allocate memory here says 100 bytes for data
    //Populate some values in data
}

我的实际需要:

  1. void *应在function1
  2. 中分配
  3. 应该通过function2和function3
  4. 传递
  5. 内存必须仅在function3中分配。
  6. 必须在function2和function3 中访问
  7. 数据

    你能帮我解决一下这个问题吗?

    谢谢, Boobesh

1 个答案:

答案 0 :(得分:0)

OP表达data

的冲突需求

function1()中,data是指向无效的“指针”。
但在function3() OP希望data为“... 数据的100个字节”。

更典型的范例是data中的function1()

void function1 () {
  void *data = NULL;
  function2(&data);  // Address of data passed, so funciton2() receives a void **
  //Will access data here
  unsigned char *ucp = (unsigned char *) data;
  if ((ucp != NULL) && (ucp[0] == 123)) { 
    ;  // success
  }
  ...
  // Then when done
  free(data);
  data = 0;
}

然后在这种情况下datafunction3()的内存分配是

void function3(void **data) {
  if (data == NULL) {
    return;
  }
  // Need to allocate memory here.  Say 100 bytes for data
  size_t Length = 100;
  *data = malloc(Length);
  if (data != NULL) {
    //Populate some values in data
    memset(*data, 123, Length);
  }
}

void function2(void **data) {
  if (data == NULL) {
    return;
  }
  function3(data);
  unsigned char *ucp = (unsigned char *) *data;
  // Will access data here
  if ((ucp != NULL) &&  (ucp[0] == 123)) { 
    ;  // success
  }
}