大的超出范围的数字出现在c++ rand()中
Large out-of-range numbers appear in C++ rand()
需要在范围内有一个充满随机数的数组。代码:
void fillArray(int *arr){
for(int i=0;i<(sizeof arr);i++){
arr[i] = rand() % 2 - 2;
}
}
int *arrPoint(int *arr, int max){
for (int i=0;i<max;i++){
printf("%d is %dn",i,arr[i]);
}
return arr;
}
int main(int argc, char *argv[]){
srand ( time(NULL) );
int arr_f[15];
fillArray(arr_s);
arrPoint(arr_s, 15);
system("PAUSE");
return EXIT_SUCCESS;
}
输出: 0 is -2
1 is -1
2 is -2
3 is -1
4 is 0
5 is 0
6 is 4633240
7 is 2686652
8 is 1973724226
9 is 1974338216
10 is 2686716
11 is 1973744850
12 is 8
13 is 1973752206
14 is 1973752162
Press any key to continue . . .
怎么回事?将rand() % 2放入括号中也没有帮助。这些数字是什么,我怎么去掉它们?
注:在蹩脚的dev - c++和Code::Blocks中尝试了相同的结果。需要程序是小尺寸的(把它放在dropbox),所以不,我不能使用100mb的boost库。
void fillArray(int *arr){
for(int i=0;i<(sizeof arr);i++){
由于arr
是指向整数的指针,因此sizeof arr
相当于sizeof (int *)
,在您的平台上显然是4(32位)。这显然不是你想要的。你只传递给fillArray
一个指向数组第一个元素的指针。
如果需要指针指向的数组中元素的个数,则需要传递该信息。C和c++语言没有办法告诉指针指向多少字节。
你在arrPoint
中做得正确。
数组并不像你想象的那样工作。不能使用sizeof
神奇地获得数组大小。数组作为函数参数传递时衰变成指向第一个元素的指针,并且必须单独提供大小信息:
int main()
{
int * arr = new int[20];
the_function(arr, 20);
//...
delete[] arr;
}
void (int * arr, std::size_t size)
{
for (std::size_t i = 0; i != size; ++i)
{
// something with arr[i]
}
}
更好的是,使用std::vector<int>
可以省去所有这些头痛,以及您可能甚至没有想到的大量进一步的头痛。
int b[10]
, sizeof(b)
确实会返回10 * sizeof(int)
。但这只是因为编译器知道数组的大小。大小信息不会被传递,并且在运行时不可用。
在fillArray
中,(sizeof arr)
是指针的大小,而不是数组的大小。
您的问题是sizeof
操作符。arr
是指向int
的指针,CC_16通常是4或8字节长。必须将数组的长度(而不是以字节为单位的大小)作为附加参数传递给函数。
尝试使用_countof(arr)
代替sizeof(arr)
。_countof
返回数组的大小,而不是指针的大小——请注意这一点。
相关文章:
- 为什么我不能将 rand() 与数组的大小一起使用?
- 为什么新的随机库比std::rand()更好
- 为什么rand()的使用被认为是不好的
- C++使用 rand 定义函数语法
- 为什么 rand 不在我的代码中生成随机数?
- 为什么 CWE 认为 rand() 具有潜在危险
- 在 c++ 中,rand() 在执行有调试和不带调试的程序时生成不同的结果
- Rand() 没有显示随机数,请帮助我了解出了什么问题:)
- Rand()大小写开关在多次迭代后运行到无穷大
- rand()函数在特定问题中的工作
- 为什么 someNumber = rand() & 100 + 1;不产生错误?
- 除了 rand() 之外,是否有任何随机生成器库,开发人员可以手动设置种子?
- 如何生成比用户使用 rand() 函数输入的数字大 5-10% 的数字?
- rand()/RAND_MAX 函数每次打印 1
- 使用 rand() 和 srand() 有问题
- " rand()%3-1 " 在 C++ 中是什么意思?
- 如何使 rand() 更加随机?
- C++ 更深入地了解 rand() 和 srand() 内部
- 在 C++ 中向 rand() 添加模数会影响 for 循环之外的执行,为什么以及如何补救?
- cpp中rand()方法的bankend程序是什么?