如何使用C在同一函数中获取不同类型的大小?

pal*_*ind 1 c dynamic-memory-allocation

我正在编写一个函数,它增加了使用malloc创建的动态内存对象的大小.该函数应该作为参数获取指向要增加的内存块的指针,块的当前大小以及块将增加的量.

像这样的东西:

int getMoreSpace(void **pnt, int size, int add) {
    xxxxxx *tmp; /* a pointer to the same as pnt */
    if (tmp = realloc(pnt, (size+add)*sizeof(xxxxxx))) { /* get size of what pnt points to */
        *pnt=tmp;
        return 1;
    else return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题是,无论pnt指向什么,我都希望函数能够工作.我如何实现这一目标?

R..*_*R.. 9

这种类型的函数不可能工作,因为它pnt是本地的,并且一旦函数返回就会丢失新指针.您可以采用类型的参数,xxxxxx **以便您可以更新指针,但之后您只能支持单一类型.

真正的问题是你正在编写一个不必要且有害的包装器realloc.只需realloc直接使用就可以使用.通过包装它无法使其更简单或更有效; 它已经尽可能简单了.

  • @Stefanos:你完全错了.成功的`realloc`之后,对象的新地址可能与传递的原始地址相同或不同,如果它们不同,原始地址可能不再用于任何事情.你为什么评论一个你明显不知道的问题? (6认同)
  • @Stefanos:函数参数是"局部变量",因为它们在函数返回时超出范围.为`ptr`分配新值不会产生任何影响; 事实上,编译器可以而且应该优化分配. (4认同)
  • @paldepind:你没有.使用C语言中的函数无法实现所需的功能.您可以使用宏,但通常的问题适用.@Stefanos:你的答案不是C. (3认同)