簡體   English   中英

如何解決堆棧“檢測到粉碎”

[英]How to solve stack "smashing detected"

我寫了一個非常簡單的 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;
}
str[i] = (char)((rand() % 26) + 'a');

str尚未分配任何數據,因此這是未定義的行為。 改用str +=

初始化字符串時,它的大小為0

string str;

因此,您所做的任何作業都超出范圍

str[i] = ...

知道長度后,您需要調整字符串的大小

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM