Debug Assertion Failed!求解!
Debug Assertion Failed!
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
我知道这么长的代码发到这边很不合适,但我也没办法了,找不到问题,只好请各位帮忙,谢过!
#include "stdafx.h"
#include <vector>
#include <deque>
#include <list>
#include <string>
#include <algorithm>
#include <iterator>
#include <numeric>
#include <time.h>
#include <set>
#include <map>
#include <functional>
using namespace std;
#define LENGTH(s) (sizeof(s)/sizeof(s[0]))
// Item sold at an undiscounted price
// derived classes will define various discount strategies
class Item_base {
public:
Item_base(const std::string &book = "",
double sales_price = 0.0):
isbn(book), price(sales_price) { }
std::string book() const { return isbn;}
// returns total sales price for a specified number of items
// derived classes will override and apply different discount algorithms
virtual double net_price(std::size_t n) const
{ return n * price; }
virtual ~Item_base() { }
virtual Item_base* clone() const{return new Item_base(*this);}
private:
std::string isbn; // identifier for the item
protected:
double price; // normal, undiscounted price
};
// discount kicks in when a specified number of copies of same book are sold
// the discount is expressed as a fraction used to reduce the normal price
class Bulk_item : public Item_base {
public:
// redefines base version so as to implement bulk purchase discount policy
double net_price(std::size_t) const;
Bulk_item(const std::string& book,double sales_price,std::size_t qty=0,double disc_rate=0.0):
Item_base(book,sales_price),min_qty(qty),discount(disc_rate){}
virtual Bulk_item* clone() const{return new Bulk_item(*this);}
private:
std::size_t min_qty; // minimum purchase for discount to apply
double discount; // fractional discount to apply
};
double Bulk_item::net_price(size_t cnt) const
{
if (cnt >= min_qty)
return cnt * (1 - discount) * price;
else
return cnt * price;
}
// use counted handle class for the Item_base hierarchy
class Sales_item {
public:
// default constructor: unbound handle
Sales_item(): p(0), use(new std::size_t(1)) { }
// attaches a handle to a copy of the Item_base object
Sales_item(/*const*/ Item_base&);
// copy control members to manage the use count and pointers
Sales_item(const Sales_item &i):
p(i.p), use(i.use) { ++*use; }
~Sales_item() { decr_use(); }
Sales_item& operator=(const Sales_item&);
// member access operators
const Item_base *operator->() const
{
if (p) return p;
else throw std::logic_error("unbound Sales_item");
}
const Item_base &operator*() const
{
if (p) return *p;
else throw std::logic_error("unbound Sales_item");
}
private:
Item_base *p; // pointer to shared item
std::size_t *use; // pointer to shared use count
// called by both destructor and assignment operator to free pointers
void decr_use()
{ if (--*use == 0) { delete p; delete use; } }
};
Sales_item::Sales_item(/*const*/ Item_base& item):p(/*item.clone()*/&item),use(new std::size_t(1))
{
}
// use-counted assignment operator; use is a pointer to a shared use count
Sales_item&
Sales_item::operator=(const Sales_item &rhs)
{
++*rhs.use;
decr_use();
p = rhs.p;
use = rhs.use;
return *this;
}
inline bool
compare(const Sales_item &lhs, const Sales_item &rhs)
{
return lhs->book() < rhs->book();
}
class Basket {
// type of the comparison function used to order the multiset
typedef bool (*Comp)(const Sales_item&, const Sales_item&);
public:
// make it easier to type the type of our set
typedef std::multiset<Sales_item, Comp> set_type;
// typedefs modeled after corresponding container types
typedef set_type::size_type size_type;
typedef set_type::const_iterator const_iter;
Basket(): items(compare) { } // initialze the comparator
void add_item(const Sales_item &item)
{ items.insert(item); }
size_type size(const Sales_item &i) const
{ return items.count(i); }
double total() const; // sum of net prices for all items in the basket
private:
std::multiset<Sales_item, Comp> items;
};
double Basket::total() const
{
double sum = 0.0; // holds the running total
/* find each set of items with the same isbn and calculate
* the net price for that quantity of items
* iter refers to first copy of each book in the set
* upper_bound refers to next element with a different isbn
*/
for (const_iter iter = items.begin();
iter != items.end(); iter =
items.upper_bound(*iter))
{
// we know there's at least one element with this key in the Basket
// virtual call to net_price applies appropriate discounts, if any
sum += (*iter)->net_price(items.count(*iter));
}
return sum;
}
int main()
{
Bulk_item bi("visual c++",58,3,0.5);
Sales_item si(bi);
Basket basket;
basket.add_item(si);
basket.add_item(si);
basket.add_item(si);
//basket.add_item(*(new Sales_item(*(new Item_base("think in java",32)))));
cout<<"cout:"<<basket.size(bi)<<"total:"<< basket.total()<<endl;
}
相关推荐
Debug Assertion Failed!问题怎么解决?
Debug Assertion Failed!
出现报错Debug Assertion Failed,如何解决?
如果以上方法未能解决问题,可以尝试联系Masm集成环境的官方支持,或者查找相关论坛和社区,寻找特定的解决方案。希望如上措施及解决方案能够帮到有需要的你。PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。
Debug Assertion Failed!问题解决方法
下载代码方式:https://pan.quark.cn/s/d41d8e77c9e2 在信息技术领域,特别是在软件工程实践中,“Debug Assertion Failed!”是一个频繁出现的警示信息,它通常在调试过程中显现,当程序运行至特定位置时,预设的断言标准未能实现,进而导致了断言的失效。这一情况所关联的知识要点涵盖了断言的基本定义、断言的功能、断言失效的成因探究以及如何处理“Debug Assertion Failed!”的难题。### 断言的基本定义断言是软件工程中的一个核心概念,用于在程序代码中嵌入条件验证,旨在确保程序执行期间的状况与预期相符。当断言标准为真时,程序会继续常规运行;然而,一旦标准为假,断言便会失效,程序将中止执行,并抛出异常或警示信息,例如“Debug Assertion Failed!”。断言主要应用于调试阶段,辅助开发人员迅速识别代码中的逻辑偏差。### 断言的功能断言在软件工程中有以下几个关键用途:1. **错误识别**:通过在重要节点设置断言,可以在程序运行时即时识别不符合预期的情况,从而迅速定位故障。2. **假设验证**:断言可用于验证代码中的假设是否成立,例如确保函数调用前后的状态满足特定规范。3. **测试增强**:在单元测试和集成测试中,合理运用断言能够提升测试的覆盖面和效率,保障代码的可靠性。### 断言失效的成因探究“Debug Assertion Failed!”警示的发生,通常暗示以下几种情形之一:1. **逻辑偏差**:代码中存在逻辑上的缺陷,导致断言标准不成立。2. **数据偏差**:输入的数据或变量的值超出预期范围,引发断言失效。3. **并发冲突**:在多线程环境中,由于线程同步的难题,可能在某一...
occcont.cpp报错 所缺OCX控件.rar
occcont.cpp line 925运行错误 Debug Assertion Failed:表示缺少某个OCX控件。这里提供msflxgrd.ocx和mscomm32.ocx。下载后复制到C:\Windows\SysWOW64目录下,regsvr32注册即可
ActiveX控件之mscomm32.ocx
mscomm.ocx 组件,用于解决MFC开发串口通信出现“Debug Assertion Failed”具体安装方法参考本人博客



