Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
333 views
in Technique[技术] by (71.8m points)

c - Problem with calling realloc inside function where an array is a parameter


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The argument tab of the function sth is a copy of what is passed and change to that won't affect what is passed. Therefore, free(tab); in the main() function means free(NULL);. This is defined to do nothing and it won't contribute for avoiding memory leak. Pass pointers to what should be modified to have functions modify what are passed.

#include <stdio.h>
#include <stdlib.h>

struct x{
    int a;
    char b;
};


void allocate( struct x **tab,int *size)
{
    *size = 1+2*(*size);
    *tab= realloc(*tab, (size_t) (*size) * sizeof (**tab));
}


void sth (struct x **tab, int *size) // receive a pointer of struct x*
{
    //do something here
    // allocate(&(*tab), size);
    allocate(tab, size);
}

int main(void)
{
    int size=0;
    struct x *tab=NULL;
    sth(&tab, &size); // pass a pointer to what should be modified
    //do sth here with tab
    free(tab);
    return 0;
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...