#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) )
因为
return
malloc()
need not to be casted.
n
表示元素个数,一个p
是指针,所以MACRO定义要改。
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)))
我正在尝试使用 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) )
因为
return
malloc()
need not to be casted.n
表示元素个数,一个p
是指针,所以MACRO定义要改。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)))