簡體   English   中英

讀取未知大小的字符串

[英]reading string of unknown size

我編寫了此函數,該函數按char讀取字符串char並增加分配的大小。 由於某種原因,我在讀取大約100個以上字符的字符串時會隨機獲得VS2010中的錯誤“ _CrtIsValidHeapPointer”。 我嘗試調試它,但我真的無法弄清楚出了什么問題

char *unknown_size_string(){
    int i=0, size=10;
    char *name=NULL, *alloc_check=NULL, letter;
    //allocates initial size of 10 bytes
    name=(char *)malloc(sizeof(char)*size);
    if(!name){return NULL;}
    //reads char by char until newline reached
    while((letter=getchar())!='\n'){
        *((name)+i++)=letter;
        //when the remaining buffer size is 1 byte, allocating another 10 bytes
        if((i+1)==size){
            alloc_check=name;
            realloc(alloc_check,(size+=10)*sizeof(char));
            if(!alloc_check){return name;}
            name=alloc_check;
        }
    }
    *((name)+i)='\0';
    return name;
}

任何幫助,將不勝感激。

謝謝

除了有關考慮空終止字節的注釋之外,這里的主要問題是:

realloc返回新分配的區域(可能相同,可能不同)。

所以你必須在realloc(alloc_check,(size+=10)*sizeof(char));分配回alloc_check realloc(alloc_check,(size+=10)*sizeof(char)); 或者您只是造成內存泄漏並繼續在舊位置進行寫入。

alloc_check = realloc(alloc_check,(size+=10));

(嗯,當尺寸更大時,不能保證每次更改位置,但是有時必須在沒有足夠連續空間的情況下進行更改)

放在一邊: name=(char *)malloc(sizeof(char)*size); => name=malloc(size); char大小始終為1,無需malloc指針)

N5170提取:

將sizeof應用於類型為char,unsigned char或signed char(或其限定版本)的操作數時,結果為1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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