“运行时检查失败#2:变量'数字'周围的堆栈已损坏”

时间:2013-12-06 23:46:48

标签: c function pointers

我正在为彩票游戏编写这个小程序。

所以我得到的代码输入了我的6位数和一个小函数来生成我的随机数,但是一旦我输入我的6个数字并在我的rand生成函数上运行测试我得到一个错误说“运行时检查失败#2:变量“数字”周围的堆栈已损坏“。

你们中的任何人都可以告诉我,我做错了什么吗?我绝对无能

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void Generate(int *a){
    int i;
    for(i=0; i<= 5;i++){
        a[i] = (1 + (unsigned int)rand()%42);
    }
}

main(){
    int Numbers[5];
    int Lotto[5];
    int i,n;

    for(i = 0; i<=5;i++){
        printf("enter your %de number: ", i+1);
        scanf("%d", &Numbers[i]);
    }
    srand(time(NULL));
    for(n=0; n<6;n++){
        Generate(&Lotto[n]);
        if(n<1){
            printf("%d",Lotto[n]);
        }else{
            printf("%5d",Lotto[n]);
        }
    }
}

3 个答案:

答案 0 :(得分:1)

更改

int Numbers[5];
int Lotto[5];

for(n=0; n<6;n++){
    Generate(&Lotto[n]);

int Numbers[6];
int Lotto[6];

Generate(&Lotto[0]);
for(n=0; n<6;n++){

答案 1 :(得分:0)

你的情况有误。

          for(i = 0; i<=5;i++){

应该是

          for(i = 0; i<5;i++){

因为数组Numbers的内存仅为5个整数。带有lotto数组的另一个循环和函数Generate()中的指针访问a的问题相同。它们都导致超出范围的访问错误,在C中为undefined。或者,如果要在其中包含6个整数,则相应地更改数组大小。请记住,对于大小为0的数组,数组索引从n-1开始,最高为n

答案 2 :(得分:0)

在C中,数组是从0索引的。您声明了两个大小为5的数组。

更改

for(n=0; n<6;n++){...}  

for(n=0; n<5;n++){...}  

否则您的程序行为未定义