所以我有一些代码可以很好地处理小文本文件但是崩溃了较大的文本文件。代码的重点是获取一个文件和一个参数n,解析代码并将所有内容保存在大小为n的chuck中的二维数组中。因此缓冲区[0] [0]到[0] [n-1]应该包含n个字符,缓冲区[1] [0]到[1] [n-1]应该保存下一个n块,依此类推。我的代码在文件只有几个单词时有效,但是如果文件较大,我会收到一个错误,说realloc():下一个大小无效。有什么想法吗?这是我的代码。
void bsort(int n)
{
int numwords= 0;
int numlets=0;
char ** buffer=(char**)malloc(numwords*n);
while (!feof(stdin))
{
char l= getchar();
if (l!= EOF)
{
if (numlets%n==0)
{
numwords=numwords+1;
buffer=(char**)realloc(buffer,numwords*n);
if(!buffer)
{
printf("Allocation error!");
}
buffer[numwords-1]= (char*) malloc (n);
buffer[numwords-1][numlets%n]=l;
// printf("%c", buffer[numwords-1][numlets%n]);
numlets=numlets+1;
}
}
int i,j;
for (i=0; i < numwords; i++)
{
for(j=0; j< n; j++)
{
printf("%c",buffer[i][j]);
}
}
答案 0 :(得分:0)
AFAIK,malloc(0)
无法保证返回有用的指针realloc()
。
documentation仅保证malloc(0)
返回null或可以安全地用于调用free()
的指针。
答案 1 :(得分:0)
看起来好像每次获得一个角色,你都在重新分配你的缓冲区。这对我来说似乎有点不对劲。您是否想过分配一些空间,对\0
执行memset,并且只是分别管理当前大小和缓冲区大小?
可能是realloc首先出现了指向任何内容的指针的问题。如果在第一个字符输入后失败,则可能是您的第一个malloc()
出现问题。预先分配一些空间可以解决这个问题。