2014-02-28 66 views
-1

这个功能非常混乱,它会在我的测试仪上导致分段错误,有什么方法可以改善它吗?它应该采用sku参数,它是Product对象的一个​​属性,并将其与库存数组中的元素(其中包含指向Product的指针并且大小为50)匹配,如果发现我应该返回指针。函数返回指针C++导致的分割错误?

Product* Supplier::getProduct(const string &sku) 
{ 
bool found = false; 
int counter =0; 
Product* ret= new Product(); 

     while (found =false && counter< inventory.size()) 
     { 
       if(inventory[counter] && sku == inventory[counter]->getSKU()) 
       { 
         found = true; 
         ret = inventory[counter]; 
       } 
     counter++; 
     } 

     if (found ==false) 
     { 
       cout << "not found" << endl; 

     } 
return ret; 

} 
+2

而(发现= FALSE ..)应同时(发现==假的...) – Inisheer

+0

你的内存泄漏。您创建一个'产品'的实例,但是当在库存中找到一个项目时它永远不会被删除。 –

+0

为什么不彻底摆脱'found',一旦找到它就返回结果?并摆脱那个'新';它导致内存泄漏。返回'nullptr',或者抛出异常,如果没有找到。 –

回答

4

您的代码是found = false。这需要是found == false!found

2

变化:

while (found =false && counter< inventory.size()) 

while (found==false && counter< inventory.size())