16:38错误: Debug Assertion Failed!
Program: F:\......\Debug\f0815.exe
File:dbheap.c
Line:1050
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse
......
源程序:
#include<iostream>
#include<fstream>
using namespace std;
class Vector
{
int * v;
int sz;
public:
Vector(int s=1);
Vector(Vector& v1);
void remove(){ delete[] v; }
int size() { return sz; }
void set(int);
void display();
int &operator [] (int);
~Vector(){ delete[] v; cout<<"~Vector"<<endl; }
};
Vector::Vector(int x)
{
set(x);
for(int i=0; i<x; i++)
{
v[i]=0;
}
}
Vector::Vector(Vector& t)
{
sz=t.sz;
set(sz);
for(int i=0; i<sz; i++)
{
v[i]=t[i];
}
// set(v1.sz);
}
void Vector::set(int s)
{
sz = s;
if(s<=0)
{
cerr<<"bad Vector size.\n";
exit(1);
}
v= new int[s];
}
int& Vector::operator[] (int i)
{
if(i<0 || i>=sz)
{
cerr<<"Vector index out of range.\n";
exit(1);
}
return v[i];
}
void Vector::display()
{
for(int i=0; i<sz; i++)
{
cout<<v[i]<<" ";
}
cout<<"\n";
}
class Matrix
{
int *m;
int szl, szr;
public:
void set(int, int);
void remove() { delete[] m; }
int sizeL() { return szl; }
int sizeR() {return szr; }
int &elem(int, int);
};
void Matrix::set(int i, int j)
{
szl=i;
szr=j;
if(i<=0 || j<=0)
{
cerr<<"bad Matrix size.\n";
exit(1);
}
m=new int[i*j];
}
int &Matrix::elem(int i, int j)
{
if(i<0 ||szl<=i || j<0 ||szr<j)
{
cerr<<"Matrix index out of range.\n";
exit(1);
}
return m[i*szr+j];
}
Vector multiply(Matrix &m, Vector &v)
{
if(m.sizeR()!=v.size() )
{
cerr<<"bad multiply Matrix with Vector.\n";
exit(1);
}
Vector r;
r.set(m.sizeL() );
for(int i=0; i<m.sizeL(); i++)
{
r[i]=0;
for(int j=0; j<m.sizeR(); j++)
{
r[i] +=m.elem(i, j)*v[j];
}
}
return r;
}
int main()
{
Vector v1(5);
Vector v2(v1);
for(int k=0; k<5; k++)
{
cout<<v1[k];
}
cout<<endl;
for(k=0; k<5; k++)
{
cout<<v2[k];
}
cout<<endl;
ifstream in("in.txt");
int x, y;
in>>x>>y;
Matrix ma;
ma.set(x, y);
for(int i=0; i<x; i++)
{
for(int j=0; j<y; j++)
{
in>>ma.elem(i, j);
}
}
in>>x;
Vector ve;
ve.set(x);
for(i=0; i<x; i++)
{
in>>ve[i];
}
Vector vx=multiply(ma, ve);
vx.display();
ma.remove();
ve.remove();
vx.remove();
return 0;
}
原因:1.内存泄漏;所以当程序退出时,系统会收回分配的内存,于是调析构函数,由于内存已被错误地释放,于是就会出现“Debug Assertion Failed”的错误。
2.这个assert说明什么问题呢?说明有一块内存在被释放的时候,它的头部里面的信息已经被改掉了,和预期的不一样。内存分配的程序往往在被分配出的内存块头部放上一些校验信息。这个信息内存的用户是不知道也不应该修改的。这样,在内存被释放的时候,内存分配程序就可以验对这个头部信息是否被改过了。若被改过,就说明发生了内存corruption. 这种corruption有两种可能性:1)有人在内存越界写东西;或者:2)这块内存已经被释放了,又被重复释放了一次。 (在第一次被释放中,是内存分配程序改掉了头部信息)。
3.pHead_>nBlockUse就可能是空指针,或它指向的东西已经不存在了。
解决:将红色代码 ma.remove();
ve.remove();
vx.remove();
删除,或者删去remove()成员函数(与~Vector()内容功能重复,且造成上述错误)
参考:http://hi.baidu.com/yanbizhu/blog/item/ac23df0abd20db1d95ca6bed.html
http://www.yesky.com/CPCW/74031217409785856/20010912/196404.shtml
没有合适的资源?快使用搜索试试~ 我知道了~
CreateVertexBuffer问题的代码
共42个文件
h:12个
cpp:12个
vcproj:4个
需积分: 10 15 下载量 107 浏览量
2009-10-15
03:29:48
上传
评论
收藏 1.24MB RAR 举报
温馨提示
CreateVertexBufferd的问题 很郁闷的问题 希望帮忙解决一下
资源推荐
资源详情
资源评论
收起资源包目录
D3D项目0.2未完成.rar (42个子文件)
D3D项目0.2未完成
galss.bmp 768KB
D3D_Object.h 517B
resource.h 451B
AppFrame_2003.sln 1KB
AppFrame_2003.ncb 1.36MB
AppFrame_2005.sln 2KB
AppFrame.rc 2KB
Land.cpp 4KB
AppFrame.manifest 681B
AppFrame.jpg 21KB
AppFrame_2003.suo 13KB
Terrain_256.bmp 47KB
AppFrame.cpp 17KB
D3D_Object.cpp 469B
新建 文本文档.txt 3KB
AppFrame_2003.vcproj 7KB
Land.h 835B
AppFrame_2005.vcproj 15KB
Res
Common
DXUTRes.cpp 825KB
DXUTMesh.h 5KB
DXUTRes.h 602B
dxstdafx.cpp 365B
DXUTenum.h 8KB
DXUT_2005.vcproj 4KB
dxstdafx.h 4KB
DXUTsound.cpp 54KB
directx.ico 25KB
DXUTgui.h 48KB
DXUTSettingsDlg.cpp 52KB
DXUTmisc.cpp 129KB
DXUTgui.cpp 284KB
DXUT_2005.sln 872B
DXUT_2003.vcproj 4KB
DXUTmisc.h 44KB
DXUTMesh.cpp 34KB
DXUT_2003.sln 902B
DXUTenum.cpp 32KB
DXUTsound.h 6KB
DXUTSettingsDlg.h 5KB
DXUT.cpp 227KB
DXUT.h 12KB
AppFrame.exe 468KB
共 42 条
- 1
资源评论
肥嘟嘟肉呼呼
- 粉丝: 9
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功