[英]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.