【发布时间】:2015-08-21 17:14:48
【问题描述】:
我有一个函数,它会通过每次调用时重新分配新内存来为数组添加一个新位置。
问题是,对于每个调用,我需要它向数组添加一个位置,从第一次调用的 1 开始,但我知道在重新分配之前我必须进行 mallocate。
所以我的问题是,我可以先做类似p = malloc(0) 的事情,然后在我的函数中使用p = (int *)realloc(p,sizeof(int)) 重新分配吗? p 被声明为int *p。
也许有不同的语法?
当然,我可以在我的函数中创建一个条件,如果之前没有分配过内存,则将 mallocate,如果有,则重新分配,但我正在寻找更好的方法。
我遇到的第二个问题是......一旦重新分配了更多位置,我想知道数组的大小。
我知道,例如,如果我声明一个数组 a[10],则元素的数量将由 sizeof(a)/sizeof(a[0]) 定义,但由于某种原因,这不适用于声明为指针然后重新分配的数组。
有什么建议吗?
【问题讨论】:
-
@BLUEPIXY 任何一个都可以
-
@BLUEPIXY 没有赌注,它们都有效
-
这是一个非常糟糕的
realloc示例,1. 不要投射void *,2. 在检查null之前不要覆盖指针。 -
@BLUEPIXY
realloc可以与malloc先前返回的任何指针一起使用