Search code examples
cfunctiondynamic-memory-allocation

Using realloc inside a function


My apologies, I know many related questions have already been asked, so I will keep it very simple.

Despite some years of programming I cannot find the correct syntax for resizing and modifying an array (or several) inside a function. For example, say I want a function to fill an array with a set of "n" numbers, where "n" is defined within the array:

int main(int argc, char *argv[]) {
    float *data = NULL
    int n = myfunction(data);
    for(i=0;i<n;i++) printf("%f\n",data[i]);
    free(data);
}

int myfunction(float *input) {
    int i,n=10;
    input = (float *) realloc( input, n*sizeof(float) );
    if(input!=NULL) {
        for(i=0;i<n;i++) input[i] = (float)i;
        return(n);
    else return(-1)
}

I know this will not work, as I probably need to use a pointer to a pointer, but I cannot resolve which combination of pointers, pointers-to-pointers, and address notation to use inside and outside the function to use.

Any simple suggestions appreciated!


Solution

  • You need to pass a pointer to a pointer to myFunction

    #include <stdio.h>
    #include <stdlib.h>
    
    int myfunction(float **input) {
        int i,n=10;
        *input = realloc( *input, n*sizeof(float) );
        if(*input!=NULL) {
            for(i=0;i<n;i++) (*input)[i] = (float)i;
            return(n);
        }
        else return(-1);
    }
    
    int main(int argc, char *argv[]) {
        float *data = NULL;
        int n = myfunction(&data);
        int i;
        for(i=0;i<n;i++) printf("%f\n",data[i]);
        free(data);
        return 0;
    }