用calloc宏,是安全的吗?

the*_*man 1 c dynamic-allocation

如果我在我的代码中使用这个宏是安全的吗?

#define my_calloc(x, n) ((x) = (__typeof__ (x))calloc((n), sizeof(__typeof__ (&(x)))))
Run Code Online (Sandbox Code Playgroud)

我用gcc作为编译器......

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

一些想法/提示?

编辑增加:

一般我使用宏如下:

double *x;
my_calloc(x, 10);

int **y;
my_calloc(y, 30);
Run Code Online (Sandbox Code Playgroud)

Pau*_*l R 9

我认为应该是:

#define my_calloc(x, n) do { (x) = calloc((n), sizeof *(x)); } while (0)
Run Code Online (Sandbox Code Playgroud)
  • 已删除不必要/危险的演员阵容
  • 删除了多余的括号
  • 为/ if (...)和之间的正确行为添加/else
  • 固定大小的类型
  • 删除冗余和非便携 __typeof__