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

时间:2015-07-13 12:40:15

标签: c compiler-errors macros c-preprocessor

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

  

错误:')'令牌之前的预期表达式

     

错误:')'令牌之前的预期陈述

这是我的代码:

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

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

3 个答案:

答案 0 :(得分:1)

变化:

#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;
}

答案 1 :(得分: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)
  4. 那就是说,

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

答案 2 :(得分:0)

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

 ponteiro=ALLOC(char, 5);

以这种方式修复宏:

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