#define ALLOC(p,n) (p*)malloc(sizeof(p)*n))

#define ALLOC(p,n) (p*)malloc(sizeof(p)*n))

我正在尝试使用 MACROS 分配一些内存。但是我得到这个错误:

error: expected expression before ‘)’ token

error: expected statement before ‘)’ token

这是我的代码:

#define ALLOC(p,n) (p*)malloc(sizeof(p)*n)

int main(){
  char *ponteiro;
  ponteiro=ALLOC(5,ponteiro);
  return 0;
}

改变

 #define ALLOC(p,n) (p*)malloc(sizeof(p)*n))

 #define ALLOC(n,p) malloc( sizeof(*(p)) * (n) )

因为

  1. return malloc() need not to be casted.
  2. n表示元素个数,一个p是指针,所以MACRO定义要改。
  3. sizeof(p) 是错误的,因为 p 应该是指针变量名称本身。您需要 sizeof(*p).

也就是说,

  • main()的推荐签名是int main(void)
  • 你应该free()使用完成后分配的内存。

变化:

#define ALLOC(p,n) (p*)malloc(sizeof(p)*n)

至:

#define ALLOC(p,n) malloc(sizeof(*(p))*(n))

并在main()释放return

之前分配的内存
int main(){
    char *ponteiro;
    ponteiro = ALLOC(ponteiro,5);
    /* Do something */
    free(ponteiro);
    return 0;
}

宏需要一些额外的括号,你犯了一个错误:你必须将类型传递给宏:

 ponteiro=ALLOC(char, 5);

以这种方式修复宏:

 #define ALLOC(p,n)  ((p*)malloc(sizeof(p)*(n)))