这个问题我已经有一段时间了,我已经搜索过这种类型的错误,我相信它与内存泄漏或指向任何内容的指针有关。
我一遍又一遍地检查了我的代码,但由于我不知道如何调试它,我无法准确找到此问题发生的位置。即使我尝试在代码的第一行设置断点,它也会崩溃。
它正在从文件中读取一堆 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";
}
}
任何帮助将非常感激!