该程序包含如下代码:
int size;
...
int *pi = (int*)calloc(size, sizeof(int));
...
用gcc7.2编译时的错误信息如下:
错误:参数 1 范围 [18446744071562067968、18446744073709551615] 超出最大对象大小 9223372036854775807 [-Werror=alloc-size-larger-than=]
当我改变时
int *pi = (int*)calloc(size, sizeof(int));
to
int *pi = (int*)calloc((unsigned int)size, sizeof(int));
错误消失了。
但在节目中,有很多malloc
and calloc
像我原来的版本一样使用。
为什么 gcc 只检测到一个错误?
我最近在 GCC 9.1 版本上遇到了同样的问题,我在 GCC Bugzilla 上找到了这个讨论:
https://gcc.gnu.org/bugzilla//show_bug.cgi?id=85783
正如链接讨论中提到的,我能够通过根据 PTRDIFF_MAX 检查大小参数来抑制警告。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)