我最近更新了测试版本,现在正在使用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程序员的生活变得更加困难吗?
我是否可以将其更改回错误而不会产生大量其他警告错误?
或者我是否失去了情节,而且一直都是警告?
答案 0 :(得分:2)
这始终是一个警告。 C允许你隐式地将任何指针强制转换为任何其他指针,尽管任何半合半的编译器都会警告你。
但是,这是C ++中的错误。也许那就是你在想什么?
在GCC中,您可以使用-Werror=将警告变为错误,但我没有看到此特定警告的选项。您可以使用-Werror将所有警告转换为错误,但这可能比您想要的更多。
答案 1 :(得分:0)
这绝对是clang analyzer会遇到的事情之一,因此您可以使用clang构建错误。