0
C++で小さなプログラムを作成しましたが、コンパイル時にエラーは発生しませんでしたが、プログラムを実行するとエラーが発生します。C++ .exeが動作を停止しました - コードでエラーが発生しました
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <stack>
#include <queue>
#include "QueType.h"
#include "StackType.h"
#include "tools.hpp"
#include <locale>
#include <list>
using namespace std;
bool isPalindrome(const string& stringToCheck)
{
string line2;
bool pal;
string wrdF;
stack<char> word1;
queue<char> word2;
char x,y;
line2=stringToCheck;
// make lowercase
for (size_t j=0; j< line2.length(); ++j)
{
line2[j] = tolower(line2[j]);
}
std::locale loc;
std::string str = line2 ;
std::string::size_type al=0;
wrdF = "";
std::string::size_type al2 = 0;
while ((al<str.length()) ) {
if (std::isalnum(str[al])) {
wrdF += str[al];
al2++;
}
++al;
}
ItemType* items = new ItemType[al2];
strcpy(items,wrdF.c_str());
int oo=(int)al2;
for (int q=0;q<oo ;q++)
{
if (items[q] != ' ') {
word1.push(items[q]);
word2.push(items[q]);
}
}
pal = true;
while (!word1.empty() && !word2.empty())
{
x=word1.top();
y=word2.front();
if (x != y)
{
cout << "No palindrome" << endl;
pal=false;
break;
}
else
{
word1.pop();
word2.pop();
}
}
if (pal == true)
cout << " palindrome" << endl;
return(pal);
}
int main()
{
int row=0;
string line;
bool pali;
ifstream myfile ("palindrome-testfile.txt");
ofstream palin("palindromes.log");
ofstream nopalin("nopalindromes.log");
if (myfile.is_open())
{
while (getline (myfile,line))
{
// cout << line << '\n';
++row;
// cout<<row<<". ";
pali= isPalindrome(line);
if (pali)
{
palin << line << endl;
}
else
{
nopalin << line << endl;
}
}
myfile.close();
}
else cout << "Unable to open file";
return 0;
}
はそれを解決するために私を助けてください:以下の は私のコードです。前もって感謝します。
画像を正しくアップロードしてください。 http://stackoverflow.com/questions/28496851/how-to-upload-pictures-to-stackoverflow-for-posting –
'ItemType'とは何ですか?私はそれが 'char'のtypedefであると仮定します。この場合、ここで問題があります:' ItemType * items = new ItemType [al2]; strcpy(items、wrdF.c_str()); 'NULを終了するためのスペースを割り当てていないので、バッファオーバーランがあります。いずれにせよ、ここでヒープ割り当てされたバッファを使用することを突然決定した理由は明らかではありません。他の場所で 'std :: string'をうまく使用して' char'のシーケンスを管理してください。 'items'も漏れていることにも注意してください。 –
'palindrome-testfile.txt'には何がありますか?特に5行目にありますか?ラテン文字以外の文字はありますか?もしstr :: isalnum((unsigned char)(str [al]))) '()と' –