gpt4 book ai didi

转换旧的 C 代码

转载 作者:行者123 更新时间:2023-11-30 15:19:18 25 4
gpt4 key购买 nike

我在我处理的项目源代码中有这个代码片段

void func(void **p,size_t s)
{
*p = malloc(s+sizeof(size_t));
*(((size_t *)(*p))++) = s;
}

并且 gcc-4.7 无法编译它。海湾合作委员会返回

lvalue required as increment operand 

错误消息。我把它改成了

stp = ((size_t *)(*p));
*(stp ++) = s;

stp = ((size_t *)(*p));
*stp = *stp + 1;
*stp = s;

gcc 编译它们。但应用程序无法按预期工作。转换是真的吗?还有有没有什么工具可以转换?

最佳答案

这个想法似乎是分配一定量的内存(s)额外的量来存储分配在与前导 block 相同的区域中的大小,并且然后返回一个指向存储大小后面的指针。

所以试试这个:

void func(void ** p, size_t s)
{
size_t * sp = malloc(s + sizeof s);
if (NULL != sp)
{
*sp = s;
++sp;
}

*p = sp;
}

顺便说一句,释放分配的内存并不简单。

典型的调用序列,也释放该函数返回的内容,如下所示:

void * pv = NULL;
func(&pv, 42);
if (NULL != pv)
{
/* Use 42 bytes of memory pointed to by pv here. */

free(((char *) pv) - sizeof (size_t));
}

关于转换旧的 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30761256/

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