C++指向对象删除的指针数组,"Debug assertion failure!"
C++ array of pointers to objects deletion, "Debug assertion failure!"
>我有一个容器类,其中包含指向对象的指针数组。这些对象中的每一个都包含另一个指向 int 的指针数组。但是,当尝试删除指向 int 的指针数组时,程序崩溃并给出"调试断言失败!"错误。
这是我的代码:
#include <iostream>
using namespace std;
class number_group
{
private:
int *integers;
public:
number_group()
{
integers = new int [10];
}
~number_group()
{
delete [] integers;
}
};
class group
{
private:
number_group *num;
int n;
public:
group()
{
n = 0;
num = new number_group [10];
}
~group()
{
delete [] num;
}
void add(number_group N)
{
if (n + 1 < 10)
{
num[n++] = N;
}
else
{
cout << "limit reached";
}
}
};
int main ()
{
group First;
number_group A;
First.add(A);
getchar();
return 0;
}
您需要
为类组和number_group定义复制构造函数和复制赋值运算符。
错误的原因就在这两个语句中
number_group A;
First.add(A);
执行后,两个 number_group 类型的对象指向同一个数组:名称为 A 的对象和从 A 复制到函数 add 参数的临时对象。在语句末尾删除临时对象后First.add(A);
对象 A 中的指针将无效。
下面是复制构造函数和复制赋值运算符的示例
number_group( const number_group &rhs )
{
integers = new int [10];
for ( int i = 0; i < 10; i++ ) integers[i] = rhs.integers[i];
}
number_group & operator =( const number_group &rhs )
{
if ( this != &rhs )
{
int *tmp = new int [10];
for ( int i = 0; i < 10; i++ ) tmp[i] = rhs.integers[i];
delete []integers;
integers = tmp;
}
return * this;
}
您按值传递number_group
,但它不满足三法则。group
也没有.
相关文章:
- 流行"Debug Assertion Failed"
- ISALPHA 导致 C++ "Debug Assertion Failed"
- 凯撒密码程序中"Debug Assertion Failed!"问题
- 如何修复邻接列表中的"Debug Assertion Failed" "vector subscript out of range"
- "Debug assertion failed" 这种有什么问题?它应该按年份对包含电影对象的动态列表进行排序
- 什么是"debug assertion failed"
- sprintf_s() 失败并显示错误"debug assertion failed"
- C++指向对象删除的指针数组,"Debug assertion failure!"
- 获取错误"Debug Assertion Failed"
- 实现将字符串映射到 C++ 中的数组的哈希表。我一直在"Debug Assertion Failed",我不知道为什么
- typedef map, debug assertion on for loop, map/set incompatib
- 查找发生错误"Debug assertion failed"位置
- 突然"Debug assertion failed error"错误,无需进行任何代码更改。(在C++代码中)
- fprintf debug assertion fail
- "Debug Assertion"数组、头文件和声明
- [微软 VS 2013]C++在删除运算符"Debug Assertion Failed!"时失败
- 矢量"Debug Assertion Failed"
- Jsoncpp Json:读取器导致错误" Debug assertion... _pFirstBlock == pHead"
- 为什么在设置模式时,使用 getline 会导致"Debug assertion failed"消息?
- Visual Studio 2008 在调用 QDomElement::text() 函数时"Debug Assertion Failed"消息