调试断言失败-找不到错误代码
Debug Assertation Failed - Dont find bad code
我写了一个类来适应C++。当我尝试删除对象时,调试器抛出一个"调试断言失败",其中包含_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)。
也许有人可以向我展示我调试所有内存地址时的错误。
行.h
#ifndef LINES_H
#define LINES_H
#include <stdio.h>
#include <iostream>
using namespace std;
class Lines
{
public:
Lines(int _laenge) : fuellzeichen{ '#' }, name{ "Hans-Peter" }, laenge{ _laenge }{};
Lines(int _laenge, char _fuellzeichen) : fuellzeichen{ _fuellzeichen }, laenge{ _laenge }, name{ "Hans-Peter" }{};
Lines(int _laenge, char _fuellzeichen, char* _name) : fuellzeichen{ _fuellzeichen }, laenge{ _laenge }, name{ _name }{};
Lines(const Lines& _l);
~Lines();
Lines& operator= (const Lines & _l);
private:
char fuellzeichen;
int laenge;
char* name;
};
#endif // LINES_H
行.cpp
#include "Lines.h"
Lines::Lines(const Lines& _l){
fuellzeichen = _l.fuellzeichen;
laenge = _l.laenge;
int len = strlen(_l.name) + 1;
name = new char[len];
strncpy(name, _l.name,len);
}
Lines& Lines::operator=(const Lines& _l){
if (this == &_l){
return *this;
}
Lines tmp(_l);
swap(fuellzeichen, tmp.fuellzeichen);
swap(name, tmp.name);
swap(laenge, tmp.laenge);
return *this;
}
Lines::~Lines(){
delete[] name;
}
main.cpp
#include "Lines.h"
int main(int argv, char* args[]){
Lines a(20,'#');
Lines b(a);
}
不要delete []
你没有new []
Lines(int _laenge) : fuellzeichen{ '#' }, name{ "Hans-Peter" }, laenge{ _laenge }{};
Lines(){ delete[] name; }
看看上面两行:
- ctor将
name
指向字符串文字"Hans-Peter"
delete []
是name
所指向的任何数据
最简单、最好的补救方法是使用std::string
,而不是自己进行内存管理
这也将允许你遵循零规则,而不是三分之一规则。
还有一个错误,或者至少还有一个错误正在等待发生:您的一个参数ctor应该是explicit
,因此不考虑隐式转换。
顺便说一句,考虑使用默认参数来简化代码
此外,在适当的情况下使用const
:
explicit Lines(int _laenge, char _fuellzeichen = '#', const char* _name = "Hans-Peter")
: fuellzeichen{_fuellzeichen}, laenge{ _laenge } {
int len = strlen(_name)+1;
name = new char[len];
memcpy(name, _name, len);
};
当您使用复制和交换进行赋值时,请考虑编写免费函数swap
并传递值:
Lines& Lines::operator=(Lines _l) { swap(this, &_l); return *this; }
void swap(Lines& a, Lines& b) {
using std::swap;
swap(a.fuellzeichen, b.fuellzeichen);
swap(a.name, b.name);
swap(a.laenge, b.laenge);
}
(~Lines
和operator=
可能应该在类中定义,而swap
必须在该标头中声明。)
相关文章:
- 我在c ++矩阵计算器程序中找不到错误
- 我在代码中找不到错误以找到最大的素因数?
- 在我的应用逻辑中找不到错误
- 在模板类中找不到错误
- 双重释放或损坏错误(找不到错误?
- 在我的 cpp 或头文件中找不到错误,类构建失败
- 在哈希表复制构造函数中找不到错误
- 找不到错误。C++,字符串
- 8谜题代码.我的队列没有填充,我找不到错误的位置
- C++中的预期表达式,但找不到错误
- C++ 将布尔隐式转换为 int 和算术,删除分支,找不到错误
- 找不到错误"invalid conversion from char to const char*"的解决方案
- 在以下代码中找不到错误:- 在 try() 之前预期未限定 id
- 在重载运算符中找不到错误<
- C++ 中的分段错误(核心转储) 找不到错误
- 在使用set_difference算法时找不到错误
- 在我的代码中找不到错误....分段错误
- 调试断言失败-找不到错误代码
- 在我的代码中找不到错误:c++
- 在c++代码中找不到错误