- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚遇到一个奇怪的问题。我将在下面粘贴完整的代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
// declare a base class
class Base
{
public:
Base();
Base(int n, int arr[2]);
Base(const Base &base);
Base &operator=(const Base &rhs);
int getSize() const;
int *getA() const;
~Base();
private:
int *a;
int size;
};
class Case
{
public:
Case();
Case(int n, int arr[2]);
Case(const Case &rhs);
Case &operator=(const Case &rhs);
int getSize() const;
int *getA() const;
~Case();
private:
int *a;
int size;
};
class Dase
{
public:
Dase();
Dase(int bSize, int barr[2], int cSize, int carr[2]);
Dase(const Dase &dase);
Dase &operator=(const Dase &rhs);
Base getB() const;
Case getC() const;
~Dase();
private:
Base b;
Case c;
};
// implementation
Base::Base() : size(0)
{
a = NULL;
}
Base::Base(int n, int arr[2]) : size(n)
{
a = new int[n];
for (int i = 0; i < size; i++)
a[i] = arr[i];
}
Base::Base(const Base &base)
{
size = base.getSize();
a = new int[size];
for (int i = 0; i < size; i++)
a[i] = base.getA()[i];
}
Base &Base::operator=(const Base &rhs)
{
if (this == &rhs)
return *this;
size = rhs.getSize();
delete[] a;
a = new int[size];
for (int i = 0; i < size; i++)
a[i] = rhs.getA()[i];
return *this;
}
int *Base::getA() const
{
return a;
}
int Base::getSize() const
{
return size;
}
Base::~Base()
{
delete[] a;
}
Case::Case() : size(0)
{
a = NULL;
}
Case::Case(int n, int arr[2]) : size(n)
{
a = new int[n];
for (int i = 0; i < size; i++)
a[i] = arr[i];
}
Case::Case(const Case &rhs)
{
size = rhs.getSize();
a = new int[size];
for (int i = 0; i < size; i++)
a[i] = rhs.getA()[i];
}
Case &Case::operator=(const Case &rhs)
{
if (this == &rhs)
return *this;
size = rhs.getSize();
delete[] a;
a = new int[size];
for (int i = 0; i < size; i++)
a[i] = rhs.getA()[i];
return *this;
}
int *Case::getA() const
{
return a;
}
int Case::getSize() const
{
return size;
}
Case::~Case()
{
delete[] a;
}
// implement class Dase
Dase::Dase() : b(Base()), c(Case())
{
// delebrately left empty
}
Dase::Dase(int bSize, int barr[2], int cSize, int carr[2])
{
b = Base(bSize, barr);
c = Case(cSize, carr);
}
Dase::Dase(const Dase &dase)
{
b = dase.getB();
c = dase.getC();
}
Dase &Dase::operator=(const Dase &rhs)
{
if (this == &rhs)
return *this;
b = rhs.getB();
c = rhs.getC();
return *this;
}
Base Dase::getB() const
{
return b;
}
Case Dase::getC() const
{
return c;
}
Dase::~Dase()
{
b.~Base();
c.~Case();
}
在上面的代码中,我定义了 3 个类:Base、Case、Dase。我包括了他们的声明和实现。以下是主要代码:
#include "classes.h"
int main()
{
int arr[2] = {1, 2};
int brr[2] = {3, 4};
Dase d1(2, arr, 2, brr);
Dase d2;
d2 = d1;
}
这是一个非常简单的主代码,但我在运行时遇到了“double free or corruption (fasttop)”错误。
我注意到当我删除类 Dase 中的析构函数时,这个问题就消失了。如果我想保留 Dase 的析构函数,我该怎么做才能解决这个问题?我应该更改它的实现吗?
谢谢!
最佳答案
你不应该明确地调用析构函数。它是自动完成的。
所以,替换
Dase::~Dase()
{
b.~Base();
c.~Case();
}
与
Dase::~Dase()
{
}
关于c++ - 双重自由或腐败(fasttop)——C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48593302/
我正在清除以前的 malloc 中的内存,并且收到此错误:“./prot”中的错误:双重释放或损坏(fasttop)。我为某些结构分配了内存,但在尝试释放它们时遇到了此错误。这是我使用的结构: str
我写了下面的一段代码,得到了上面提到的错误 谁能告诉我哪里错了 谢谢。 #include "iostream" #include "sstream" #include int main() {
我的程序涉及在队列中组合树列表,我的程序编译完美并且适用于大约一半的代码然后向我抛出这个错误。我已经将它缩小到涉及我的 freeTree 以及我如何在编码文件中调用它,对于一些背景故事,这是基于文本文
大家好,我有一个像这样的数组大小调整函数 int add_time_element (time_t *array, time_t element, size_t *size) { if (NU
我有以下类,我在其中强制编译器生成所有复制/移动构造函数和赋值运算符。 class foo { public: float *x; size_t size; foo(int m
我看到了这个错误: *** glibc detected *** perl: double free or corruption (fasttop): 0x0000000003c1daa0 *** 错
我的代码的以下部分在执行 * glibc detected ./a.out: double free or corruption (fasttop): 0x08e065d0 时给我这个消息** 我已经
我在下面的代码中收到了双重免费或损坏(fasttop)。似乎无法弄清楚哪个指针正在创建此错误。看起来错误是在 echo_cnt 函数的 while 循环中产生的。谢谢! static void
所以我正在使用可调整大小的数组实现堆,每次重新分配内存时我都会收到此错误。问题在于 realloc ..我只是不明白它出了什么问题。这是插入函数: void* insert (data_t *data
我要使用ast_malloc和ast_realloc函数拼接一个长字符串。当我加载这个模块时,会发生段错误。有什么问题吗?非常感谢!Asterisk 的输出如下: *** glibc detected
我刚遇到一个奇怪的问题。我将在下面粘贴完整的代码: #include #include #include using namespace std; // declare a base c
以下方法在运行时生成双重释放或损坏 (fasttop) 错误(在第一行)。它是随机发生的,即它可能在程序运行的第一秒或第 35 秒发生。 QSharedPointer Utils::loadImg(Q
我的程序得到以下输出: $ ./list Enter list 1: [1,2,3,4] [ Enter list 2: [2,5,8,0] [ [1,2,3,4] [1,2,3,4] ***
对 QByteArray 的清除调用会产生以下异常: * 检测到 glibc */home/yan/FPS2/FPS2: double free or corruption (fasttop): 0
我实现了一个 Stack 类并尝试利用该类来解决 Hanoi 问题。这是我的代码: template class Node { public: Node() {
我正在尝试动态分配一个数组来从命令行读取用户输入。它可以工作 99/100 次,但如果我重复输入一堆字符,有时会出现段错误错误或双重释放或损坏(fasttop)错误。此错误相对难以重现。 我很确定错误
我想编写简单的智能指针,但遇到了问题。这只是代码的一部分,但我在这里发现了问题: #include using namespace std; class Number{ public:
基于 valgrind,我相信我的错误源于这些人,因为错误发生在我将一个新集分配给另一个集之后。 Set Z -> A^B(返回 Set 的交集运算)。我只是不确定我做错了什么,任何帮助将不胜感激!
我想知道为什么下面的程序在运行时会出现“double free or corruption (fasttop)”的错误。我知道我可以使用字符串而不是字符数组。但我想使用具有动态内存分配的字符数组。你能
我在运行 Linux 的远程服务器上使用 httr 授权谷歌分析 API。到目前为止,该代码一直运行完美,而且它仍然可以在我们的本地机器上运行。不幸的是,由于这是 API 授权,因此不容易重现。 en
我是一名优秀的程序员,十分优秀!