Я работаю над домашним заданием для продвинутого курса C ++.Программа имитирует серверную часть интернет-магазина.К счастью, для назначения есть автогрейдер, и мои классы Product и Customer проходят каждый тестовый пример, однако мой класс Store где-то имеет ошибку сегментации, и, поскольку автогрейдер тестирует каждую функцию модулем, я знаю, что ошибка происходит в addProduct (), это также может происходить в getProduct (), так как addProdcut () вызывает getProduct ().
Я не уверен, где происходит ошибка, я пытался воссоздать ее на своем компьютере, используя код драйвера,но автогрейдер просто говорит, что произошла ошибка сегментации, и не говорит мне, где.https://imgur.com/a/W1dzI7K
//numProducts is a static int and a data member of the Store class
static int Store::numProducts = 0;
//The products array is an array of Product pointers maximum size 100
Product* products[100];
//Each product has a unique id of type integer
bool Store::addProduct(int productID, const char productName[])
{
Product* product = getProduct(productID);
if (numProducts == 99) { return false; }
else if (product != nullptr) { return false; }
else
{
Product* newProduct = new Product(productID, productName);
products[numProducts] = newProduct;
numProducts++;
return true;
}
}
Product* Store::getProduct(int productID)
{
for (Product* product : products)
{
if (product->getID() == productID) {return product;}
}
return nullptr;
}
int Product::getID() const { return id; }
//here is the Product constructor, however i know that this is perfectly fine since the product class passes all unit-testing.
Product::Product(int productID, const char productName[]) :
id(productID), inventory(0), numSold(0), totalPaid(0.0) {
setName(productName);
strcpy_s(this->description, "");
}
//And here is the setName function in case you want to recreate this
void Product::setName(const char productName[]) {
if (strlen(productName) > 0) {
strcpy_s(this->name, productName);
}
else {
//Counter is a static int
counter++;
ostringstream oss;
oss << "Product " << counter;
strcpy_s(this->name, oss.str().c_str());
}
}