如何解决重新分配后 C 中的 free() 错误下一个大小无效
几个小时以来,我一直试图找出问题所在,但始终无法解决。这是代码,它当然要长得多,但我已将其简化为问题本身。
#define BUFFER_SIZE 60
char *str;
void readText() {
char read_char;
int i = 0;
str = (char *) calloc(BUFFER_SIZE,sizeof(char));
while ((read_char = getchar()) != EOF) { /* user hits ctrl+d */
*(str+i) = read_char;
i++;
if (i % BUFFER_SIZE == 0) {
str = (char *) realloc(str,BUFFER_SIZE * sizeof(char));
}
}
textSize = i;
/* Here I print the text... same error printing or not printing */
free(str);
}
}
只有在输入文本超过缓冲区大小时才会出现错误。
(编辑: if (i % BUFFER_SIZE == 0) 所以它每次达到 60 时都会出现,但错误是一样的 )
谢谢
解决方法
那是因为您public static async Task<PagedList<T>> CreateAsync(IQueryable<T> source,int pageNumber,int pageSize)
{
var count = await source.CountAsync();
var items = await source.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToListAsync();
return new PagedList<T>(items,count,pageNumber,pageSize);
}
使用相同的大小,当字符串增大时您需要使用新的大小:
realloc
另外,您似乎忘记设置尾随 NUL,您需要它来构建有效(可打印)字符串,切换到
while ((read_char = getchar()) != EOF) { /* user hits ctrl+d */
if (i >= BUFFER_SIZE) {
str = realloc(str,i);
}
*(str+i) = read_char;
i++;
}
和
if (i >= BUFFER_SIZE - 1) {
在 str[i] = '\0';
循环之后。
最后,更喜欢
while
结束
size_t i = 0; // or better yet size_t len = 0;
将尺寸传递给 int i = 0;
和朋友。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。