Я пытаюсь получить большой массив случайных чисел, а затем передать этот массив в функцию, которая создаст новый массив с 10 элементами, значения которых соответствуют со значениями в большом массиве. Я передаю параметр start в функцию, чтобы указать индекс большого массива, из которого я начну копировать значения в меньший массив.Ошибка сегментации при передаче указателя на массив в функцию (C++)
В случае мое объяснение не понятно, у меня есть массив А из 20 случайно сгенерированных чисел:
A = {1, 2, 3, .... 20}
Я хочу сделать массив B, который содержит первые 10 чисел:
B = {1, 2, 3, .... 10}
и массив C, который содержит второй 10:
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.
Да, это было определенно тривиально. Урок выучен! благодаря! – jreed