【发布时间】:2016-08-20 09:10:13
【问题描述】:
我在下面的代码中犯了一个非常愚蠢的错误:
int main(int argc, char *argv[])
{
const int ARR_SIZE = 2147483648;
int* intarr = (int *) malloc(sizeof(int) * ARR_SIZE);
for(int i =0; i < ARR_SIZE; i++) {
intarr[i] = i;
}
}
所以我真的应该为 ARR_SIZE 使用无符号整数。 2147483648 分配给带符号的 32 位 int 时实际上是最大的负数。 编译器不(或不应该)为此发出警告是否有充分的理由。在分配大于类型最大值的正文字时,我是否应该要求显式转换? (对于我真的想要一个负数的情况)
(当我遇到这个问题时,源语言是 C++,但我认为这也是一个 C 问题)。
这是用 g++ 6.1.1 编译的:
g++ -Wall -g -o test_so test_so.cpp
【问题讨论】:
-
int的大小主要是平台相关的。 -
问题是缺少编译器版本和编译选项。
-
关于“正面文字”:没有“负面文字”。
-
"所以我真的应该使用 unsigned int" 是的,即
size_t。它就是为此而生的。
标签: c++