gpt4 book ai didi

c - realloc 无法重新分配先前 malloc 的指针

转载 作者:太空宇宙 更新时间:2023-11-04 00:16:12 24 4
gpt4 key购买 nike

我正在开发一个函数,使用 getchar()stdin 读取整行到 char* 中,它主要有效,但是当我输入更长的字符串时,我得到了

realloc(): invalid next size: 0x00000000007ca010

函数如下:

char *readCMDLine() {
char *cmdline = malloc(sizeof(char));
int counter = 0;
char c;
while (c != 10) {
c = getchar();
cmdline = realloc(cmdline, sizeof(cmdline) + sizeof(char));
cmdline[counter] = c;
counter++;
}
return cmdline;
}

有没有办法解决这个问题,以便我可以用它阅读更大的行?

最佳答案

使用 sizeof(cmdline) 没有达到您的预期。当与指针一起使用时,它将返回指针的大小,而不是分配的内存。这对于在编译时定义的数组是不同的。

您可以使用 counter 变量来跟踪已经分配了多少字节。

还有一种风格:sizeof(char) 始终为 1,因此没有必要。

在每个字符之后重新分配是不高效的。最好分配一个适当大小的缓冲区,当它已满时分配一个更大的缓冲区。

关于c - realloc 无法重新分配先前 malloc 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34577953/

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