Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 较大的超出范围的数字出现在C++;兰德()_C++_Random - Fatal编程技术网

C++ 较大的超出范围的数字出现在C++;兰德()

C++ 较大的超出范围的数字出现在C++;兰德(),c++,random,C++,Random,需要有一个范围内的随机数数组。代码: 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 %d\n",i,arr

需要有一个范围内的随机数数组。代码:

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 %d\n",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;
}    
怎么回事?将rand()%2放在括号中也无济于事。这些数字是什么?我如何摆脱它们

p.S.在蹩脚的Dev-C++和Code::Blocks中尝试了这一点,得到了相同的结果。需要小尺寸的程序(放在dropbox中),所以不,我不能使用100mb的boost lib。

void fillArray(int*arr){
void fillArray(int *arr){
    for(int i=0;i<(sizeof arr);i++){

对于(int i=0;i在
fillArray
中)(arr的大小)
是指针的大小,而不是数组的大小。

数组的工作方式与您想象的不一样。您不能使用
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
省去你所有的头痛,以及你可能没有想到的更多的头痛


(我的声明有一个例外:对于本地作用域中的自动数组,
intb[10]
sizeof(b)
确实会返回
10*sizeof(int)
。但这只是因为编译器知道数组大小。大小信息不会传递,并且在运行时不可用。)尝试使用
\u countof(arr)
而不是
sizeof(arr)
\u countof
返回数组的大小,而不是指针。请注意这一点。

您的问题是
sizeof
运算符。
arr
是指向
int
的指针,通常为4或8字节长。您必须传递数组的长度(不是以字节为单位的大小)作为函数的附加参数。

rand工作正常,您仅使用它填充arrayNote的前4个元素。注意,如果使用内存调试器(如valgrind),您会立即发现此错误。如果你在看似好的代码中看到一些意想不到的东西,那么最好先调试一下。此外,arr_s和arr_f是不同的变量——arr_s是在哪里定义的?只是一个输入错误,我扔掉了一些代码。-1:(a)这是特定于Microsoft的,不可移植,更重要的是,(b)在这种情况下,它将不起作用,因为OP所拥有的只是一个指针
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]
  }
}