-4
誰でも問題のコードを教えてください。 「 * *スタックが検出スマッシング・コード以下は私にエラーを与える:」それは私に正しい出力を提供しますが、最後に、私はエラーを取得しミリアンペア4以下のコードでエラーが表示されます*** stack smashing detected ***:
私は
として、私は最後に、信号を得るチェックするためにGDBを使用しました__stack_chk_fail()at stack_chk_fail.c:28 28 stack_chk_fail.c:そのようなファイルやディレクトリはありません。
#include <iostream>
#include <string.h>
#include <iomanip>
using namespace std;
void computeLps (char p[], int n) {
int *lps = new int[n];
int len = 0;
lps[0] = 0;
int i = 1;
while(i < n)
{
/* code */
if(p[len] == p[i]){
len ++;
lps[i] = len;
i++;
}
else {
if(len != 0) {
len = lps[len - 1];
}
else{
lps[i] = 0;
i++;
}
}
}
for (int i = 0; i < n; ++i)
{
/* code */
cout << lps[i]<<" ";
}
cout <<endl;
}
int main() {
char b[] = "ABABDABACDABABCABAB";
char a[] = "ABABCABAB";
strcat (b,"$");
strcat (b,a);
//cout << b;
computeLps(b,strlen(b));
return 0;
}
何も追加するスペースがありません。だからあなたのstrcat呼び出しはスタックに割り当てられた他の変数とデータを上書きします –
C++、Lukeを使用します。 string.hでダウン!文字列でアップ! – user4581301
std :: stringとstd :: vectorを使用してください。 –