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 90 79 8 6 72 84 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 19 47 4 84 89 81

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

ご覧のとおり、ある時点までは値が設定されていますが、その後はすべてゼロになっています。ここで何が起こっているのか、どうすれば修正できるのでしょうか?

ありがとう!

#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) は、配列の 1 つの要素のサイズを返します。これは int のサイズです。

于 2013-11-08T05:27:40.937 に答える