这是程序片段
void func1 (UInt8* data, size_t length)
{
UInt8 *data2;
//do some actions to populate data2 with valid data;
length = 12;
data = malloc(length);
memset(data, 0 , length);
memcpy(&data[0], &data2[9] , length);
return;
}
void main()
{
void *data;
size_t dataSize;
func1 (data, dataSize)
printf ("%s", data);
}
这里的问题是,当我在调试器中看到数据从 func1 返回后的地址时,它指向 0x0000。我的理解是,由于数据是在堆上分配的,它应该继续指向它在函数中指向的任何地址。
我在这里错过了什么?
数据仍然存在于堆上,但是您传递给 func1
的指针在调用点不会改变,所以您正在“泄漏”内存。
你需要传递一个指向指针的指针,才能处理这个:
func1(&data, &dataSize);
void func1 (UInt8** data, size_t *length)
{
UInt8 *data2;
//do some actions to populate data2 with valid data;
length = 12;
*data = malloc(*length);
memset(*data, 0 , *length);
memcpy(*data, &data2[0] , *length);
return;
}
我是一名优秀的程序员,十分优秀!