[英]Segfault after realloc twice
我試圖編寫一個函數,該函數接受輸入而沒有給出長度。 當我嘗試獲得一個輸入時,它是可行的,但是如果我想獲得多個輸入,則會出現段錯誤。 下面是代碼:
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)
一種更有效的技術是“不時地”重新分配,像大多數矢量分配器一樣,而不是每次都跟蹤分配的緩沖區的容量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.