用calloc宏,是安全的吗?

时间:2011-04-05 19:52:18

标签: c dynamic-allocation

如果我在代码中使用此宏,

是否安全?

#define my_calloc(x, n) ((x) = (__typeof__ (x))calloc((n), sizeof(__typeof__ (&(x)))))

我将gcc作为编译器...

在我的程序中有很多内存分配点,所以我用它。 我在5分钟前尝试了它,我得到了一些奇怪的sigabort和sigsev,现在我要回家了......如果我能找到一些东西,我会再试一次。

一些想法/提示?

编辑增加:

通常我按如下方式使用宏:

double *x;
my_calloc(x, 10);

int **y;
my_calloc(y, 30);

2 个答案:

答案 0 :(得分:9)

我认为应该是:

#define my_calloc(x, n) do { (x) = calloc((n), sizeof *(x)); } while (0)
  • 已删除不必要/危险的演员
  • 删除了多余的括号
  • 添加/添加if (...)else
  • 之间的正确行为
  • 固定大小类型
  • 删除多余且不可移植的__typeof__

答案 1 :(得分:4)

您的宏分配n 指针而不是对象。试试sizeof(*(x))