c - GCC、函数和指针参数、警告行为

标签 c gcc pointers arguments warnings

我最近更新了一个测试发行版,现在使用的是 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/

相关文章:

从 ‘size_t’ 转换为 ‘int’ 可能会改变结果的符号 - GCC , C

c - 在指向指针链的指针末尾初始化值

c - 变量 'pminutes' 未初始化就被使用

c - scanf() 格式字符串中尾随空格的影响是什么?

c - l 需要作为增量操作数的值

gcc - 在 OS X 10.9 中构建 GCC 4.8.2

ubuntu - tk.h 在/usr/include 中查找tcl.h,但tcl.h 在/usr/include/tcl 中。我没有编写 tk.h 权限来修复代码

C++函数参数: use a reference or a pointer (and then dereference)?

c - C 中的文件问题

c - 哪个变量在C中具有更大的值比较