gpt4 book ai didi

c - 重新分配两次后出现段错误

转载 作者:行者123 更新时间:2023-11-30 14:39:49 25 4
gpt4 key购买 nike

我试图编写一个函数,它接受没有给定长度的输入。当我尝试获取单个输入时它有效,但如果我想获取多个输入,则会出现段错误。下面是代码:

char* getinput()
{
char c,*str=0,*tmp=0;
int i=0;

while(c)
{
c=getchar();

if(c!=EOF && c!='\n')
{
if(!(tmp=realloc(str,(i+1)*sizeof(char))))
{
free(str);
return NULL;
}

str=tmp;
str[i++]=c;
}
else c=0;
}

str[i]=0;
return str;
}

当我尝试获取单个输入时,我可以打印字符串:

string1      
string1

当我尝试获取多个输入时,我不能:

string1
Segmentation fault (core dumped)

还有另一个变量 string2。我很感激任何帮助。谢谢。

最佳答案

假设您输入一个个字符

您将分配一个一个字节的缓冲区,将字符写入其中,然后增加索引并执行以下操作:

str[i]=0;

此时i==1并且您正在str分配的边界之外编写:未定义的行为

我建议您将缓冲区大小增加一:

if(!(tmp=realloc(str,(i+2)))

(并删除 sizeof(char) 位,因为它保证为 1)

更有效的技术是“不时”重新分配,跟踪分配的缓冲区的容量,就像大多数 vector 分配器所做的那样,而不是每次都重新分配。

关于c - 重新分配两次后出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55884863/

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