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