1

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

#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);
4

2 回答 2

9

我认为应该是:

#define my_calloc(x, n) do { (x) = calloc((n), sizeof *(x)); } while (0)
  • 不必要/危险的演员表已被删除
  • 删除了多余的括号
  • do/while 添加用于和之间的正确if (...)行为else
  • 固定大小的类型
  • 删除多余的和不可移植的__typeof__
于 2011-04-05T19:59:36.663 回答
4

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

于 2011-04-05T19:57:12.310 回答