如何解决堆栈“检测到粉碎”

时间:2019-07-12 11:34:11

标签: c++

我写了一个非常简单的c ++程序来生成随机字符串。并且在执行以下代码时,它会给出“检测到堆栈崩溃”的信息。

#include<bits/stdc++.h>
#define SIZE 30
using namespace std;

int main() {
    srand(time(0));
    string str;
    int len = rand() % SIZE;
    for(int i = 0; i < len; i++) {
        str[i] = (char)((rand() % 26) + 'a');
    //      cout<<str[i];
    }
    cout<<str<<endl<<"..."<<endl<<len<<endl;
}

2 个答案:

答案 0 :(得分:4)

初始化字符串时,其大小为0

string str;

因此,您所做的任何作业都不在这里

str[i] = ...

知道长度后,您需要调整字符串的大小

int len = rand() % SIZE;
str.resize(len);

答案 1 :(得分:3)

str[i] = (char)((rand() % 26) + 'a');

str尚未分配任何数据,因此这是未定义的行为。改用str +=