2

我执行以下操作:

void * myFunction(void) {
    void *someBytes = malloc(1000);
    // fill someBytes

    //check the first three bytes (header)
    if(memcmp(someBytes, "OK+", 3) == 0) {
        // move the pointer (jump over the first three bytes)
        someBytes+=3
    }

    return someBytes;
}

接收器如何释放分配的指针?当然我可以在指针上做一个-3。

但是这种情况有最佳实践吗?是否有一个简单的解决方案仍然允许在接收器函数中调用free(someBytes); 因为someBytes也可以容纳数兆字节我想避免 memcpy (malloc(1000)仅用于示例)。

4

3 回答 3

1

没有任何办法(除非您碰巧知道确切的偏移量)。最佳做法是存储原始指针的副本,以便以后使用它来释放内存。

void* myFunction(void) {
    void* someBytes = malloc(1000);
    void* pos = someBytes;
    // fill someBytes

    //check the first three bytes (header)
    if(memcmp(pos, "OK+", 3) == 0) {
        // move the pointer (jump over the first three bytes)
        pos+=3
    }

    return someBytes;
}
于 2012-07-21T14:22:13.617 回答
1

为什么不定义一个结构并让你的函数分配并返回一个指向它的指针呢?

struct MyStruct {
  PrivateHeader *header;
  UserData* data;
};

PrivateHeader是一个不透明的指针,指向只myFunction知道如何访问/操作的数据;您的函数的使用者只知道如何访问/操作data.

于 2012-07-21T14:40:21.460 回答
0

接收方也可以创建缓冲区吗?为什么 myFunction 分配它不删除的内存?

void* myFunction(void) {
  void* someBytes = malloc(1000);

  return someBytes;
}

在某种程度上(功能上)等同于:

size_t myFunction(void* someBytes, size_t size) {
  // do something

  if(memcmp(someBytes, "OK+", 3) != 0) {
      return 0;  // didn't find nuthin'
  }

  return how_many_bytes_myFunction_put_in_the_buffer;
}


void myCaller(void)
{
  void* someBytes = malloc(1000);

  size_t result = myFunction(someBytes, 1000);

  // do something amazing

  free(someBytes);
}
于 2012-07-21T15:43:16.787 回答