GCC,函数和指针参数,警告行为

时间:2010-06-03 08:00:03

标签: c gcc pointers arguments warnings

我最近更新了测试版本,现在正在使用GCC 4.4.3。现在我已经把所有东西都搞定了,我已经回到编码并构建了我的项目,我收到了其中一条可怕的消息:

*** glibc detected *** ./boxyseq: free(): invalid pointer: 0x0000000001d873e8 ***

我绝对知道这里有什么问题,但是当我看到我的C代码,我调用一个释放动态分配的数据结构的函数时,我感到很困惑 - 我已经传递了一个不兼容的指针类型 - 一个完全指向的指针不同的数据结构。

warning: passing argument 1 of 'data_A_free' from incompatible pointer type
note: expected 'struct data_A *' but argument is of type 'struct data_B *'

我很困惑,因为我确信这之前会出现错误并且编译永远不会完成。这不仅会让C程序员的生活变得更加困难吗?

我是否可以将其更改回错误而不会产生大量其他警告错误?

或者我是否失去了情节,而且一直都是警告?

2 个答案:

答案 0 :(得分:2)

这始终是一个警告。 C允许你隐式地将任何指针强制转换为任何其他指针,尽管任何半合半的编译器都会警告你。

但是,这是C ++中的错误。也许那就是你在想什么?

在GCC中,您可以使用-Werror=将警告变为错误,但我没有看到此特定警告的选项。您可以使用-Werror将所有警告转换为错误,但这可能比您想要的更多。

答案 1 :(得分:0)

这绝对是clang analyzer会遇到的事情之一,因此您可以使用clang构建错误。