2

我是 C++ 新手,希望能帮助解决这个问题。我试过用谷歌搜索示例,但似乎找不到我正在寻找的东西。我有一个为 int 数组分配一些空间的主函数和一个用随机数数组填充该空间的辅助函数(getRandomNumberArray)。

我正在打印在辅助函数中创建的数组,然后将其传输到主函数中分配的内存。我莫名其妙地失去了一堆价值观。

下面的代码输出这个:

95 70 24 40 26 7 84 45 62 13 41 11 21 55 23 50 17 8 76 20 94 25 90 29 95 26 9 44 47 8 61 27 42 10 15 26 53 64 55 906 709 28 72 3 3 33 29 4 65 56 65 12 30 14 59 25 42 69 99 47 2 42 25 80 90 32 51 17 14 74 83 94 34 92 88 51 85 78 71 9 38 54 17 34 48 47 99 48 78

95 70 24 40 26 7 84 45 62 13 41 11 21 55 23 50 17 8 76 20 94 25 90 29 95 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

如您所见,在某种程度上,值已设置,但随后全为零。知道这里发生了什么以及如何解决吗?

谢谢!

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;


void getRandomNumberArray(int *result, int size){
    srand(time(0));

   int randomNos[100] = {0};

   for(int i = 0; i < 100; i++){
      randomNos[i] = rand() % 100 + 1;
      cout << randomNos[i] << ' ';
   }

   memcpy(result, randomNos,size);

}

int main() {
    int size = 100;
    int *randomNumbers = new int[size];
    getRandomNumberArray(randomNumbers,size);
    cout << "" << endl;
    for(int i = 0; i < 100; i++){
          cout << randomNumbers[i] << ' ';
       }

    free(randomNumbers);

   return 0;
}
4

2 回答 2

2
  1. 为什么不首先将 if 直接放入数组中?
  2. 如果你坚持使用memcpy(result, randomNos,size * sizeof(int));
  3. 使用你delete[]不使用的 C++free
  4. 使用矢量可能会更好 - 请参阅http://www.cplusplus.com/reference/vector/vector/
于 2013-11-08T05:31:36.397 回答
1

int 通常有 4 个字节的大小。使用

size * sizeof(*randomNos)

反而。sizeof(*randomNos) 将返回数组中一个元素的大小,即 int 的大小

于 2013-11-08T05:27:40.937 回答