How to use realloc in a function in C

后端 未结 3 1458
佛祖请我去吃肉
佛祖请我去吃肉 2020-11-29 06:34

Building on what I learned here: Manipulating dynamic array through functions in C.

void test(int data[])
{
    data[0] = 1;    
}    

int main(void)
{    
         


        
3条回答
  •  北荒
    北荒 (楼主)
    2020-11-29 06:47

    Keep in mind the difference between a pointer and an array.
    An array is a chuck of memory in the stack, and that's all.If you have an array:

    int arr[100];
    

    Then arr is an address of memory, but also &arr is an adress of memory, and that address of memory is constant, not stored in any location.So you cannot say arr=NULL, since arr is not a variable that points to something.It's just a symbolic address: the address of where the array starts.Instead a pointer has it's own memory and can point to memory addresses.

    It's enough that you change int[] to int*.
    Also, variables are passed by copy so you need to pass an int** to the function.

    About how using realloc, all the didactic examples include this:

    1. Use realloc;
    2. Check if it's NULL.In this case use perror and exit the program;
    3. If it's not NULL use the memory allocated;
    4. Free the memory when you don't need it anymore.

    So that would be a nice example:

    int* chuck= (int*) realloc (NULL, 10*sizeof(int)); // Acts like malloc,
                  // casting is optional but I'd suggest it for readability
    assert(chuck);
    for(unsigned int i=0; i<10; i++)
    {
        chunk[i]=i*10;
        printf("%d",chunk[i]);
    }
    free(chunk);
    

提交回复
热议问题