0

我需要使用指针将 500 到 600 之间的随机数存储到数组中,然后打印出这些数字。我得到一个分段错误......核心转储,我真的不明白这意味着什么。错误发生在 printf 语句之后 ("%15d\n", aPtr[i]);

int main(){
    int size;
    int j, i;
    int temp;
    int sum = 0;


    printf("Enter size of array");
    scanf("%d", &size);


    int array[size];
    int *aPtr = malloc(sizeof(int) * size);

    for (i = 0; i <= size; i++){
         srand(time(NULL));
         aPtr[i] = rand() % 500 + 100;
         printf("%15d\n", aPtr[i]);
4

3 回答 3

4

i <= size;应该i < size;

如果您有一个包含 50 个项目的数组,则有效索引为 [0,49]。

于 2012-09-23T21:12:23.750 回答
1

您需要在进入循环srand 之前调用。

就目前而言,您将获得一长串相同数字,因为您每次都将随机数生成器重置为相同的种子(假设时间没有改变,这很可能)。此外,如果您想要介于 500 和 600 之间的数字,那么您的公式是错误的。试试这个片段:

srand(time(NULL));
for (i = 0; i < size; i++){
    aPtr[i] = (rand() % 101) + 500;
    printf("%d\n", aPtr[i]);
}
于 2012-09-23T21:21:19.253 回答
1

您只需调用 srand (初始化随机数生成器)一次。把它移出for。如果你想要 500 到 600 之间的随机数,你需要在 0 到 100 之间生成它们( rand() % 101),然后加上 500。

于 2012-09-23T21:21:37.413 回答