关于gcc4.4.3的一个问题

发布于 2022-09-06 04:30:57 字数 300 浏览 11 评论 7

基本环境: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 则不会报错,也不会报警。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

尬尬 2022-09-20 09:40:28

函数free 调用形式: free(void*ptr); 功能:释放ptr所指向的一块内存空间

叫思念不要吵 2022-09-20 09:40:07

free(p,sizeof(int));?

不是只要free(p)么

岁月苍老的讽刺 2022-09-20 09:38:44

free 带两个参数么?

姐不稀罕 2022-09-20 07:42:01

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

回心转意 2022-09-20 05:34:37

gcc4.4.3更严格了,无聊。
prolj 发表于 2010-05-04 13:10

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

void aaaa(int x)
{
   printf("%dn",x);
}

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

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

当梦初醒 2022-09-19 21:46:36

回复 1# futurecho

    #include <stdlib.h>

埋情葬爱 2022-09-18 08:47:09

gcc4.4.3更严格了,无聊。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文