我尝试使用MACROS分配一些内存。但我得到了这个错误:
错误:')'令牌之前的预期表达式
错误:')'令牌之前的预期陈述
这是我的代码:
#define ALLOC(p,n) (p*)malloc(sizeof(p)*n)
int main(){
char *ponteiro;
ponteiro=ALLOC(5,ponteiro);
return 0;
}
答案 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) )
,因为
return
malloc()
need not to be casted。n
表示元素的数量,p
是指针,因此MACRO定义应该更改。sizeof(p)
是错误的,因为p
应该是指针变量名称本身。您需要sizeof(*p)
。那就是说,
main()
的推荐签名为int main(void)
free()
分配的内存。答案 2 :(得分:0)
宏需要一些额外的括号,你犯了一个错误:你必须将类型传递给宏:
ponteiro=ALLOC(char, 5);
以这种方式修复宏:
#define ALLOC(p,n) ((p*)malloc(sizeof(p)*(n)))