简单的C ++程序超出了它的数组边界和崩溃

时间:2014-03-19 14:36:23

标签: c++ arrays random

我是C ++新手。我想生成一个随机的字符串序列,以便在我的程序中使用。它大部分时间都可以工作,但偶尔会出现行为错误并从计算机内存中转储随机字符串。我做了什么愚蠢的错误(如果有的话)?

代码如下:

#include <iostream>
#include <ctime> // Needed for the true randomization
#include <cstdlib>
#include <string>

using namespace std;

int main ()
{
    string holder[] = {"A", "B", "C", "D", "E"};

    int xRan;
    srand(time(0)); // This will ensure a really randomized number by help of time.

    xRan=rand()%6+1;
    xRan--;
    cout << "Value of xRan is: " << xRan << " value is " << holder[xRan] << endl;   

    return 0;
}

3 个答案:

答案 0 :(得分:2)

xRan=rand()%6+1;
xRan--;

将生成0到5之间的随机数。您的有效数组索引为0到4。

答案 1 :(得分:2)

您的xRan计算为您提供1到6之间的数字。您的数组有5个元素,编号为0到4。

xRan=rand() % 6 + 1;更改为xRan=rand() % 5;,然后删除您递减xRan的下一行。这将为您提供0到4之间的数字,这就是您想要的。

答案 2 :(得分:0)

holder中你没有足够的元素(你需要6个)。变化:

string holder[] = {"A", "B", "C", "D", "E"};

为:

string holder[] = {"A", "B", "C", "D", "E", "F"};

另请注意,您在此处有一些冗余:

xRan=rand()%6+1;   // xRan = 1..6
xRan--;            // xRan = 0..5

您可以将其更改为:

xRan=rand()%6;     // xRan = 0..5