The program contains code like follows:
int size;
...
int *pi = (int*)calloc(size, sizeof(int));
...
Here is the error message when compiled with gcc7.2:
error: argument 1 range [18446744071562067968, 18446744073709551615] exceeds maximum object size 9223372036854775807 [-Werror=alloc-size-larger-than=]
When I changeint *pi = (int*)calloc(size, sizeof(int));
toint *pi = (int*)calloc((unsigned int)size, sizeof(int));
The error disappeared.
However, in the program, there are many malloc
and calloc
used like my original version.
Why there is only one error detected by gcc?
I recently had the same problem on my GCC 9.1 build, and I found this discussion on the GCC Bugzilla:
https://gcc.gnu.org/bugzilla//show_bug.cgi?id=85783
As mentioned in the link discussion, I was able to suppress the warning by checking the size parameter against PTRDIFF_MAX.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With