私はこの問題をしばらく抱えていて、このタイプのエラーについて検索しましたが、メモリリークまたは何も指していないポインターに関係していると思います。
コードを何度もチェックしましたが、デバッグ方法がわからないため、この問題が発生している場所を正確に見つけることができません。コードの最初の行にブレークポイントを設定しようとしても、クラッシュします。
ファイルから一連のISBNを読み取り、それらが有効かどうかを確認しています。
数が多いように見えるかもしれませんが、ロジックは非常に単純です。
これが私のコードです:
#include <iostream>
#include <fstream>
#include <iomanip>
#include <list>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <vector>
using namespace std;
class Isbn
{
private:
string isbnCode;
public:
Isbn()
{
}
Isbn(string isbn): isbnCode(isbn)
{
}
~Isbn()
{
}
string getIsbn()
{
return isbnCode;
}
void setIsbn(string input)
{
isbnCode = input;
}
};
void setListOfIsbn(const string filename, list<Isbn> &listOfIsbn);
void validateIsbns(const list<Isbn> listOfIsbn, list<bool> &validations);
void printValidations(const list<Isbn> listOfIsbn,
const list<bool> validations);
string bToS(const bool bValue);
int main(int argc, char *argv[])
{
list<Isbn> listOfIsbn;
list<bool> validations;
string inputFile = argv[1];
setListOfIsbn(inputFile, listOfIsbn);
validateIsbns(listOfIsbn, validations);
printValidations(listOfIsbn, validations);
return 0;
}
void setListOfIsbn(const string filename, list<Isbn> &listOfIsbn)
{
list<Isbn>::const_iterator iterator;
ifstream fin;
fin.open(filename.c_str());
char ch;
string isbnCode;
while (!fin.eof())
{
fin.get(ch);
if (ch == '\n')
{
Isbn isbn;
(isbn).setIsbn(isbnCode);
listOfIsbn.push_back(isbn);
isbnCode = "";
}
else
{
isbnCode.append(reinterpret_cast<const char*>(ch));
}
}
}
void validateIsbns(const list<Isbn> listOfIsbn, list<bool> &validations)
{
list<Isbn>::const_iterator itr;
for (itr = listOfIsbn.begin(); itr != listOfIsbn.end(); itr++)
{
Isbn isbn = *itr;
string isbnCode = isbn.getIsbn();
string isbnCodeReform = "";
vector<int> products;
int sumOfProducts = 0;
unsigned int i;
for (i = 0; i < isbnCode.length(); itr++)
{
if(isalnum(isbnCode[i]))
{
isbnCodeReform[i] = isbnCode[i];
}
}
for (i = 0; i < (isbnCodeReform.length() - 1); itr++)
{
if(isbnCodeReform[i] == 'X')
{
isbnCodeReform[i] = 10;
}
products[i] = isbnCodeReform[i] * (10 - i);
}
vector<int>::const_iterator itr;
for (itr = products.begin(); itr != products.end(); itr++)
{
sumOfProducts += products[*itr];
}
if ((sumOfProducts % 11) == 0)
{
validations.push_back(true);
}
else
{
validations.push_back(false);
}
}
}
void printValidations(const list<Isbn> listOfIsbn,
const list<bool> validations)
{
list<Isbn>::const_iterator itr;
list<bool>::const_iterator itr2 = validations.begin();
for(itr = listOfIsbn.begin(); itr != listOfIsbn.end(); itr++)
{
string validate = bToS(*itr2);
Isbn isbn = *itr;
cout << isbn.getIsbn() + ": " + validate + "\n";
itr2++;
}
}
string bToS(const bool bValue)
{
if(bValue == 0)
{
return "False";
}
else
{
return "True";
}
}
どんな助けでも大歓迎です!