gpt4 book ai didi

c - 在 c 中重新分配的正确方法

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

我有以下代码:

FILE *fp;
fp = fopen("input_file","r");
size_t newsize = 1;
char buffer[MAX_SIZE];
char *text;
text = malloc(sizeof(char) * newsize);
strcpy(text,"");

while (fgets(buffer,sizeof(buffer),fp) != NULL)
{
newsize += strlen(buffer)
text = realloc(text,newsize);
strcat(text,buffer);
}

在程序的最后,我free(text)。我需要在每次重新分配后释放吗?现在我的程序“工作”了,但是当我通过 valgrind 运行它时,我遇到了很多错误。

编辑:我编辑了所有其他代码,这是我在 realloc 部分之前得到的错误

==3953== Warning: client switching stacks?  SP change: 0x7ff0004c0 --> 0x7fe85f190
==3953== to suppress, use: --max-stackframe=8000304 or greater
==3953== Invalid write of size 4
==3953== at 0x40076E: main (p21.c:37)
==3953== Address 0x7fe85f19c is on thread 1's stack
==3953==
==3953== Invalid write of size 8
==3953== at 0x400774: main (p21.c:37)
==3953== Address 0x7fe85f190 is on thread 1's stack
==3953==
==3953== Invalid write of size 8
==3953== at 0x400793: main (p21.c:43)
==3953== Address 0x7fe85f188 is on thread 1's stack
==3953==
==3953== Invalid read of size 8
==3953== at 0x4E8C38D: __fopen_maybe_mmap (iofopen.c:60)
==3953== by 0x400797: main (p21.c:43)
==3953== Address 0x7fe85f188 is on thread 1's stack
==3953==
==3953== Warning: client switching stacks? SP change: 0x7fe85f190 --> 0x7ff0004c0
==3953== to suppress, use: --max-stackframe=8000304 or greater

最佳答案

Do I need to free after every realloc?

没有。 realloc 释放旧的内存块并给你一个新的内存块来玩。

除非它可以在不释放内存块的情况下扩展内存块,在这种情况下它会这样做并返回相同的 block 。但在这种情况下,由于没有分配额外的东西,所以没有额外的东西可以释放。

关于c - 在 c 中重新分配的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42756263/

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