gpt4 book ai didi

c - 如何释放 C 中的 union 数组?

转载 作者:太空狗 更新时间:2023-10-29 16:12:27 26 4
gpt4 key购买 nike

我有一个返回 union 数组的函数,我需要在使用后释放 union 数组。

更新的代码:

这是一个结构

typedef union _data {
float F;
uint8_t B[4];
} floatCharFunction;

这是一个读取函数:

void HW_SWversion(version state,floatCharFunction* ver)
{
floatCharFunction fVersionRead[2] = {0,0};//SW-HW
*ver = *fVersionRead;
//floatCharFunction SW,HW;
if(state == SAVE_VERSION)
{
FLASH_ERASE(_4KB,VERSION_BASE_ADDR);
fVersionRead[0].F =VERSION_SW;
fVersionRead[01].F =VERSION_HW;
FLASH_WRITE(fVersionRead[0].B,VERSION_BASE_ADDR,VERSION_SIZE_IN_BYTES/2);
FLASH_WRITE(fVersionRead[1].B,VERSION_BASE_ADDR+VERSION_SIZE_IN_BYTES/2,VERSION_SIZE_IN_BYTES/2);
}else if(state == READ_VERSION)
{
FLASH_READ(VERSION_BASE_ADDR,fVersionRead[0].B, VERSION_SIZE_IN_BYTES/2);
FLASH_READ(VERSION_BASE_ADDR+VERSION_SIZE_IN_BYTES/2,fVersionRead[1].B, VERSION_SIZE_IN_BYTES/2);
//u16VersionRead = (versions[0] << 8) | versions[1];


}else return;
}

这是一个主要的:

main()
{
floatCharFunction* ver = malloc(2*sizeof(*ver));
if (ver == NULL) {
//printf("out of memory\n");
exit(1);
}
HW_SWversion(READ_VERSION,ver);
free(ver);
}

最佳答案

你的代码有两个问题:

  • ver = HW_SWversion(READ_VERSION); 重新分配 ver,泄漏您在上一行中分配的内存
  • HW_SWversion 返回指向立即超出范围的自动变量的指针。访问此变量的后果是未定义的。

此处最简单的更改是更改 HW_SWversion 以更新指向客户端分配实例的指针。

void HW_SWversion(version state, floatCharFunction* ver)
{
/* assign version info */
}

int main()
{
floatCharFunction ver[2];
HW_SWversion(READ_VERSION, &ver);
}

或者,如果你想使用动态分配的内存

void HW_SWversion(version state, floatCharFunction* ver)
{
/* assign version info */
}

int main()
{
floatCharFunction* ver = malloc(2*sizeof(*ver));
if (ver == NULL) {
printf("out of memory\n");
exit(1);
}
HW_SWversion(READ_VERSION, ver);
free(ver);
}

关于c - 如何释放 C 中的 union 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23648178/

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