大きな乱数の配列を取得しようとしていて、その配列を、値が対応する10個の要素を持つ新しい配列を作成する関数に渡そうとしています。大きな配列の値を使用します。パラメータstartを関数に渡して、大きな配列のインデックスを示します。この配列から、値を小さな配列にコピーし始めます。配列へのポインタを関数に渡すときのセグメンテーションフォールト(C++)
私の説明は、私は20のランダムに生成された番号の配列Aを有する、明らかではない場合:
A = {1、2、3、... 20}
私がしたいです最初の10個の数字を保持する配列Bを作る:
B = {1、2、3、... 10}
及び第二10を保持する配列のC:
C = { 11,12,13、... 20}
私は乱数を生成し、ループのためにそれらを表示することができるよ、私は、私はターミナルでセグメンテーションフォールトを取得する新しいアレイにしようとして始めると:
(コアダンプ)セグメンテーションフォールトを
以下は私のコードです。
int main() {
int size = 20;
int *arrA = getRandomScores(size);
int *arrB = applyScores(arrA, 0);
int *arrC = applyScores(arrA, 10);
for(int i = 0; i < 10; i++) {
cout << arrB[i] << endl;
}
cout << endl << endl;
for(int i = 0; i < 10; i++) {
cout << arrC[i] << endl;
}
return 0;
}
int *applyScores(int *arr, int start) {
int *newArr;
for(int i = 0; i < 10; i++) {
newArr[i] = arr[start];
start++;
}
return newArr;
}
int *getRandomScores(int size) {
int *arr;
//return null if size is zero or negative
if (size <= 0)
return NULL;
//dynamically allocate the array
arr = new int[size];
//seed the random number generator
srand(time(0));
//populate the array with random numbers
for(int i = 0; i < size; i++)
arr[i] = rand() % 100;
return arr;
}
私は、Linux上でので、私は、より詳細なエラーメッセージを表示するためにvalgrindのを使用するように言われました。以下はvalgrindが私に与えたものです。これはセグメンテーションフォルトとの最初の遭遇です。その答えがvalgrindの助けを借りて些細なものであれば私を許してください。
ええ、それは間違いなく些細なことでした。学んだ教訓!ありがとう! – jreed