我执行以下操作:
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;
}
接收器如何释放malloced指针? 当然我可以在指针上做-3。
但这种情况有最好的做法吗?
是否有一个简单的解决方案仍然允许接收器功能调用free(someBytes);
因为someBytes
也可以保持多兆字节,所以我想避免使用memcpy(malloc(1000)
仅用于示例)。
答案 0 :(得分: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;
}
答案 1 :(得分:1)
为什么不定义一个结构并让你的函数分配并返回指向它的指针?
struct MyStruct {
PrivateHeader *header;
UserData* data;
};
PrivateHeader
是指向只有myFunction
知道如何访问/操作的数据的不透明指针;您的函数的消费者只知道如何访问/操作data
。
答案 2 :(得分: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);
}