c9コンパイラを使用してスタックスマッシングエラーが発生しました。エラーの原因を調べました。バグのあるコード/渡し変数、または宣言/初期化されていないものが、私はエラーに関係していない不要なコードの次のコードを剥奪しましC9.ioとC++を使用したスタックスマッシングエラー
...私のコードに誤りを見つけカント、これは私が持っているものです。
#include <iostream>
#include <cstring>
using namespace std;
void checkWord(char *word, int size);
int main() {
string word1 = "racecar";
char wordArr[sizeof(word1)];
strcpy(wordArr, word1.c_str());
checkWord(wordArr, strlen(wordArr));
string word2 = "something";
char word2Arr[sizeof(word2)];
strcpy(word2Arr, word2.c_str());
checkWord(word2Arr, strlen(word2Arr));
}
void checkWord(char *wordArr, int size) {
// cout << "Size1: " << size << endl;
int workingSize;
if ((size % 2) != 0) {
workingSize = (size +1)/2;
} else {
workingSize = size/2;
}
char *p, *q;
p = wordArr;
q = wordArr+strlen(wordArr)-1;
bool pal = true;
for (int i = 0; i < workingSize; i++) {
if (*p != *q) {
pal = false;
}
p++;
q--;
}
}
これは私にこのエラー出力を与える:
*** stack smashing detected ***:/home/ubuntu/workspace/.c9/metadata/workspace/3_16Lab2.cpp.o terminated
bash: line 12: 48077 Aborted $file.o $args
Process exited with code: 134
それ以外の場合、プログラムは問題なく実行され、この場合、「racecar」および「something」という単語が回文かどうかを確認します。
'string'から' char * 'への変換は不要です。 – Arash