我寫了這個函數,它通過char讀取字符串char並增加分配的大小。 出於某種原因,我在VS2010中隨機獲取錯誤「_CrtIsValidHeapPointer」,同時閱讀大約100多個字符的字符串。 我試圖調試它,但我真的不能圖什麼錯讀取未知大小的字符串
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;
}
任何幫助,將不勝感激。
感謝
上一個'*((name)+ i ='\ 0';'如果字符串的精確長度爲10個字符,則會導致錯誤,您不會重新分配它,然後在第11個位置(i = 10)添加'\ 0'...或者我錯了 –
I想想我有剩餘1字節的分配情況,但生病嘗試看看它是否改變了一些事情 –
@MartinVerjans你說得對。檢查應該完成佔最後零空間。 –