是否安全?
#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);
答案 0 :(得分:9)
我认为应该是:
#define my_calloc(x, n) do { (x) = calloc((n), sizeof *(x)); } while (0)
if (...)
和else
__typeof__
答案 1 :(得分:4)
您的宏分配n
指针而不是对象。试试sizeof(*(x))
。