- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想弄清楚为什么我的程序在运行时会失败。到目前为止,当我运行我的程序时,它对我失败了。我调试了错误,它把我带到了 dbgdel.cpp。第 32 行“_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));”。找遍了都没有找到答案,是不是和我的内存泄露有关?
这是我的标题:
#include <iostream>
using namespace std;
namespace project
{
#ifndef MATRIX_H
#define MATRIX_H
typedef int* IntArrayPtr;
class Matrix
{
public:
friend ostream& operator<<(ostream& out, Matrix& object);
//friend istream& operator>>(istream& in, Matrix& theArray);
//Default Constructor
Matrix();
Matrix(int max_number_rows, int max_number_cols, int intial_value);
//Destructor
~Matrix();
//Copy Constructor
Matrix(const Matrix& right_side);
//Assignment Operator
Matrix& operator=(const Matrix& right_side);
void Clear();
int Rows();
int Columns();
bool GetCell(int x,int y, int& val);
bool SetCell(int x,int y, int val);
int getNumber(int r, int c);
//void Debug(ostream& out);
private:
int initialVal;
int rows;
int cols;
IntArrayPtr *m;
};
#endif
}
我的实现文件:
#include <iostream>
#include "Matrix.h"
using namespace project;
using namespace std;
namespace project
{
Matrix::Matrix()
{
typedef int* IntArrayPtr;
IntArrayPtr *m = new IntArrayPtr[1];
for(int i = 0; i < 1; i++)
m[i] = new int[1];
for(int r = 0; r < 1; r++)
for(int c = 0; c < 1;c++)
m[r][c] = 0;
}
Matrix::Matrix(int max_number_rows, int max_number_cols, int initial_value)
{
initialVal = initial_value;
rows = max_number_rows;
cols = max_number_cols;
IntArrayPtr *m = new IntArrayPtr[rows];
for(int i = 0; i < rows; i++)
m[i] = new int[cols];
for(int r = 0; r < max_number_rows; r++)
for(int c = 0; c < max_number_cols;c++)
m[r][c] = initial_value;
}
Matrix::~Matrix()
{
for(int i = 0; i <= rows; i++)
delete [] m[i];
delete [] m;
}
void Matrix::Clear()
{
for(int r = 0; r < rows; r++)
for(int c = 0; c < cols;c++)
m[r][c] = initialVal;
}
int Matrix::Rows()
{
return rows;
}
int Matrix::Columns()
{
return cols;
}
bool Matrix::GetCell(int x,int y, int& val)
{
if(x < rows || y < cols)
return false;
else
{
val = m[x - 1][y - 1];
return true;
}
}
bool Matrix::SetCell(int x, int y, int val)
{
if(x < rows || y < cols)
return false;
else
{
m[x - 1][y - 1] = val;
return true;
}
}
int Matrix::getNumber(int r, int c)
{
return m[r][c];
}
ostream& operator<<(ostream& out, Matrix& object)
{
for(int r = 0; r < object.rows; r++)
{
for(int c = 0; c < object.cols; c++)
{
out << " " << object.m[r][c];
}
out << endl;
}
return out;
}
Matrix& Matrix::operator=(const Matrix& right_side)
{
if (this != &right_side)
{
rows = right_side.rows;
cols = right_side.cols;
delete[] m;
IntArrayPtr *m = new IntArrayPtr[rows];
for(int i = 0; i < rows; i++)
m[i] = new int[cols];
for(int r = 0; r < rows; r++)
for(int c = 0; c < cols;c++)
m[r][c] = right_side.initialVal;
}
return *this;
}
/*
void Matrix::Debug(ostream& out)
{
out << "Number of rows = " << rows << endl;
out << "Number of columns = " << cols << endl;
out << "Initializer = " << initialVal << endl;
out << "Current contents of the matrix: " << endl;
out << m << endl;
}
*/
/*
istream& operator >>(istream& in, Matrix& theArray)
{
in >>
}
void interfaceMatrix()
{
int userChoice, rows, columns, value;
cout << "Default matrix or custom(1 for default, 0 for custom): ";
cin >> userChoice;
if (userChoice == 1)
{
Matrix object;
return object;
}
else if(userChoice == 0)
{
cout << "Enter number of rows: ";
cin >> rows;
cout << "Enter number of columns: ";
cin >> columns;
cout << "Enter initial value of each element: ";
cin >> value;
if(rows <= 0 || columns <= 0)
{
cout << "Invalid input." << endl;
exit(1);
}
else
{
Matrix object(rows, columns, value);
return object;
}
}
else
{
cout << "Invalid choice." << endl;
exit(1);
}
}
*/
}
在我的驱动程序中,我只放置了 Matrix test(2,2,2),因此我可以为每个元素创建一个初始值为 2 的 2 x 2 数组。我收到上述错误。
最佳答案
您正在分配 rows
行数,但取消分配 rows+1
行数。检查析构函数。 <= 必须是 <.
除此之外,您的代码中还有许多其他 [潜在] 错误:
m
变量而不是设置 m
你类(class)的数据成员(这就是为什么我有惯例总是在数据成员之前加上 m_ 以防止这种混淆)。此错误同时出现在构造函数和赋值运算符中。rows
分配矩阵,但是 max_number_rows
初始化矩阵。虽然它现在可以正常工作,但如果 row
可能会导致错误稍后以不同方式初始化(例如,如果 row
是用 std::max(max_number_rows,1000)
初始化的。赋值运算符中的代码更好。>=
而不是 <
关于c++ - _ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)) 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20645738/
在 C++ 中的以下代码: class Foo { vector otherFoos; }; int _tmain(int argc, _TCHAR* argv[]) { Foo* dat
我有一个代码,我需要在其中分配一个指向指针数组的指针,但是当我想安全地删除它时,调试器给我错误。 我知道我不应该使用指针的指针数组,而应该使用 vector 类,但我不得不这样做。我有两个类(clas
我正在尝试释放动态内存,但出现错误。我需要一些帮助来指出我的代码的哪一部分导致了错误。 我有析构函数来释放两个动态数组。删除析构函数我没有错误。 错误:_BLOCK_TYPE_IS_VALID(pHE
免责声明:这是一项家庭作业。我们必须创建一个使用类对象来保存数字的计算器。我们有一个名为 Element 的类,它进入数据库并包含一个名为 Container 的类,该类存储数字数据。 我在这段代码中
当我在 Debug模式下构建可视化 C++ 项目时,只需两行代码 TEnviron * fk = new TEnviron(); delete fk; 它从 _CrtIsValidHeapPointe
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我在这里查看了类似的问题,但仍然无法意识到我做错了什么。请帮忙。 我需要为大小有限的字符串类制作模板(就像在 Pascal 中一样)代码如下:http://pastebin.com/syZf3yM8
首先,我将向您展示我的代码。 std::ifstream file("accounts/22816.txt"); if(file){ char *str[50]; int count=0;
我有一个错误“_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)”,我不知道该怎么办.. person.h #ifndef _person_H #define _person
这个问题在这里已经有了答案: What is The Rule of Three? (8 个答案) 关闭 8 年前。 我知道这是一个常见错误,所以我尝试创建一个最小示例。我认为这是因为我试图释放堆栈
我在下面代码的最后一行遇到错误“_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)”: pixelCoorindateAndThreePoint* tempSpace = n
这个问题在这里已经有了答案: What is the behavior of "delete" with stack objects? [duplicate] (1 个回答) 关闭 6 年前。 我是
class A { public: void doSomething() {} } boost::unordered_map> m; m.insert(0, new A()); m.inser
我正在尝试修复一个非常严重的内存泄漏,但不知何故我无法在不触发此断言的情况下删除对象。 我已通过 Google 搜索了解决方案,并已阅读有关此错误的 Stackoverflow 上的问题,但我仍然无法
我一直在从事一个新项目,但遇到了一个我不知道为什么会失败的问题。 当我执行此行删除 textY 时,给我错误 _Block_Type_Is_Valid (pHead->nBlockUse)。那我做错了
我想弄清楚为什么我的程序在运行时会失败。到目前为止,当我运行我的程序时,它对我失败了。我调试了错误,它把我带到了 dbgdel.cpp。第 32 行“_ASSERTE(_BLOCK_TYPE_IS_V
我正在编写一个类似于电影信息系统的程序。我是 C++ 的初学者。 每次编译后我都会收到此错误警报消息。我确信在 detructor 调用时它会出错。 我阅读了很多与此错误相关的帖子。但我还是忍不住。我
我不知道为什么我总是收到 _Block_Type_Is_Valid (pHead->nBlockUse) 错误。我知道这通常是因为我双重删除了一些东西但我只在代码中使用了一次删除。以下是代码。 Box
我已经在这段代码上工作了一段时间,试图用测试床 main 测试我的 Company 类。我得到了我想要的所有结果,但是在完成主要功能后程序崩溃了 this message:(我很抱歉,但我是新来的,我
我知道有几篇关于此错误的帖子,但它们都是针对特定情况的。我正在制作一个文件拆分/连接器,它具有以下要求:-用户必须输入文件名/输入路径和输出文件夹。我用将原始文件拆分为 N 部分(用户必须输入)的基本
我是一名优秀的程序员,十分优秀!