【发布时间】:2017-11-23 08:25:55
【问题描述】:
程序包含如下代码:
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));更改为int *pi = (int*)calloc((unsigned int)size, sizeof(int));
错误消失了。
但是,在程序中,有很多malloc和calloc像我原来的版本一样使用。
为什么 gcc 只检测到一个错误?
【问题讨论】:
-
size真的没有初始化吗? -
不,它应该已经在某个地方初始化了。
-
与您的问题更相关,您可以尝试创建一个Minimal, Complete, and Verifiable Example 并展示给我们吗?
-
18446744071562067968=2^64-2^31。 18446744073709551615=2^64-1。随心所欲。