Search code examples
realloc

realloc():invalid next size


so I have some code that works fine with small text files but crashes with larger ones. The point of the code is to take a file and a parameter n, parse through the code and save everything in a 2d array in chucks of size n. So buffer[0][0]through [0][n-1] should hold n characters, and buffer[1][0]through [1][n-1] should hold the next n chunk, and so on. My code works when the file only has a few words, but with a larger file I get an error saying realloc():invalid next size. Any ideas why? Here is my code.

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]);
            }

        }

Solution

  • It looks as if each time you get a character, you are reallocating your buffer. That seems a little off to me. Have you thought of allocating some space, doing a memset to \0, and just managing the current size and buffer size separately?

    It may be that realloc is having issues with a pointer to nothing at first. If it fails after the first character input, you might be having issues with your first malloc(). Pre-allocating some space would solve that.