时间:2011-01-06 19:31:39

标签: c dynamic-memory-allocation

3 个答案:

答案 0 :(得分:9)

答案 1 :(得分:2)

答案 2 :(得分:1)

将元素大小作为单独的参数传递:

int getMoreSpace(void **pnt, int size, int add, size_t eltSize) 
{     
  void *tmp;
  if (tmp = realloc(pnt, (size+add)*eltSize)) 
  { 
    *pnt=tmp;
    return 1;
  }
  else 
    return 0; 
} 
...

int *p = malloc(100 * sizeof *p);
...
if (!getMoreSpace(&p, 100, 20, sizeof *p))
{
  // panic
}

这是最直接的解决方案,即使不是最优雅的解决方案。 C只是不适合动态类型信息。

修改

根据史蒂夫的评论改变了pnt的类型

正如咖啡馆指出的那样,即使每个史蒂夫都有“修复”,这也行不通。 R.是的;不要这样做。