gpt4 book ai didi

c - 尽管在堆上分配,为什么指针地址返回到 0?

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:13 25 4
gpt4 key购买 nike

这是程序片段

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;
}

关于c - 尽管在堆上分配,为什么指针地址返回到 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19646926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com