【发布时间】:2016-11-21 09:12:55
【问题描述】:
我正在尝试获取大量随机数,然后将该数组传递给一个函数,该函数将创建一个包含 10 个元素的新数组,这些元素的值与大数组中的值相对应。我将参数 start 传递给函数以指示大数组的索引,我将从该索引开始将值复制到较小的数组中。
如果我的解释不清楚,我有一个包含 20 个随机生成数字的数组 A:
A = {1, 2, 3, .... 20}
我想创建一个包含前 10 个数字的数组 B:
B = {1, 2, 3, .... 10}
还有一个包含第二个 10 的数组 C:
C = {11, 12, 13, .... 20}
我能够生成随机数并使用 for 循环显示它们,但是一旦我开始尝试创建新数组,我就会在终端中遇到分段错误:
分段错误(核心转储)
下面是我的代码。
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 的帮助下答案很简单,请原谅我。
【问题讨论】:
标签: c++ arrays pointers segmentation-fault valgrind