我最近更新了一个测试发行版,现在使用的是 GCC 4.4.3。现在我已经设置好了一切,我已经回到编码并构建了我的项目,但我收到了这些可怕的消息之一:
*** 检测到 glibc *** ./boxyseq: free(): 无效指针: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 程序员的生活更加困难吗?
我可以将它改回错误而不产生一大堆其他警告错误吗?
还是我失去了情节,它一直是一个警告?
最佳答案
这一直是一个警告。 C 允许您将任何指针隐式转换为任何其他指针,尽管任何半正经的编译器都会警告您。
不过,这是 C++ 中的一个错误。也许这就是您的想法?
在 GCC 中,您可以使用 -Werror= 将警告变成错误,但我看不到此特定警告的选项。您可以只使用 -Werror 将所有警告转换为错误,但这可能会超出您的预期。
关于c - GCC、函数和指针参数、警告行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2964171/