代码之家  ›  专栏  ›  技术社区  ›  James Morris

gcc、函数和指针参数、警告行为

  •  1
  • James Morris  · 技术社区  · 14 年前

    我最近更新了一个测试发行版,它现在使用GCC4.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 回复  |  直到 14 年前
        1
  •  2
  •   Daniel Stutzbach Edward Leno    14 年前

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

    不过,这是C++中的一个错误。也许你就是这么想的?

    在gcc中,可以使用 -Werror= 但是我看不出这个特别警告的选项。你可以用-werror来转弯 全部的 将警告转化为错误,但这可能会超出您的预期。

        2
  •  0
  •   Andrew McGregor    14 年前

    这绝对是 clang analyzer 会捕获,因此您可以使用clang使其成为错误构建。