futurecho 发表于 2010-05-04 11:33

关于gcc4.4.3的一个问题

基本环境:x86-64上使用gcc4.4.3
编译如下的程序xx.c:
main()
{
    int *p;
    p=(int *)malloc(sizeof(int));
    free(p,sizeof(int));
}
编译:gcc -c xx.c
报错:too many arguments to function "free"
如果使用gcc 4.1.2 则不会报错,也不会报警。

prolj 发表于 2010-05-04 13:10

gcc4.4.3更严格了,无聊。

jzhang918 发表于 2010-05-04 15:49

回复 1# futurecho


    #include <stdlib.h>

futurecho 发表于 2010-05-05 14:44

gcc4.4.3更严格了,无聊。
prolj 发表于 2010-05-04 13:10 http://linux.chinaunix.net/bbs/images/common/back.gif


    是,我承认gcc4.4.3相比于以前的版本,语法检查更加严格了,但下面还有个例子:
1.c:

void aaaa(int x)
{
   printf("%d\n",x);
}

2.c:
main()
{
    aaaa(2,3);
}

使用gcc4.4.3编译1.c和2.c,不会报任何错,但事实上程序中的函数aaaa在调用的时候多了个参数。
所以有点疑惑,是不是gcc在处理free的时候有什么特别的地方!

prolj 发表于 2010-05-05 15:29

是不是gnu的扩展?
另外,你没有加上头文件,没有函数原型,怎么判断你的代码是错的啊。 #include <stdlib.h>之后还可以么?

snow888 发表于 2010-05-10 15:04

free 带两个参数么?

aaaaa5aa 发表于 2010-05-13 22:42

free(p,sizeof(int));?

不是只要free(p)么

0vk0 发表于 2010-05-15 23:19

函数free 调用形式: free(void*ptr); 功能:释放ptr所指向的一块内存空间
页: [1]
查看完整版本: 关于gcc4.4.3的一个问题