簡體   English   中英

重新分配兩次后出現段錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM