我写了这个函数,它通过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你说得对。检查应该完成占最后零空间。 –