该程序包含如下代码:
int size;
...
int *pi = (int*)calloc(size, sizeof(int));
...
Run Code Online (Sandbox Code Playgroud)
这是用gcc7.2编译时的错误信息?
错误:参数 1 范围 [18446744071562067968, 18446744073709551615] 超过最大对象大小 9223372036854775807 [-Werror=alloc-size-larger-than=]
当我
int *pi = (int*)calloc(size, sizeof(int)); 改为
int *pi = (int*)calloc((unsigned int)size, sizeof(int));
错误消失了。
但是,在程序中,有很多malloc和calloc我原来的版本一样使用。
为什么gcc只检测到一个错误?
小智 5
我最近在我的 GCC 9.1 版本上遇到了同样的问题,我在 GCC Bugzilla 上发现了这个讨论:
https://gcc.gnu.org/bugzilla//show_bug.cgi?id=85783
正如链接讨论中提到的,我能够通过检查 PTRDIFF_MAX 的大小参数来抑制警告。
小智 1
警告取决于 GCC 认为的范围size。在程序中的那个特定点,它被认为处于该(非常大)范围内。在其他 malloc/calloc 调用站点,它可能没有那么大。
这很大程度上取决于size程序中不同点的计算方式。当然,第一步是确保在使用之前实际对其进行初始化。
| 归档时间: |
|
| 查看次数: |
3848 次 |
| 最近记录: |