奇怪的复制构造函数和析构函数错误

费舍尔

我有一堂课,我不断从析构函数中得到一些错误。这是分类:

#pragma once
class Number
{
    int bas;
    char* val;
public:
    Number(const char* value, int base); 
    Number(const Number& x);
    ~Number();
    void SwitchBase(int newBase);
    void Print();
    int  GetDigitsCount();
    int  GetBase(); 
};

这是cpp文件:

#include "Number.h"
#include <iostream>
Number::Number(const char* value, int base)
{
    int a = -1;
    do
    {
        a++;
    } while (value[a] != '\0');
    val = new char[a + 1];
    for (int i = 0; i <= a; i++)
        val[i] = value[i];
    bas = base;
}

Number::Number(const Number& x)
{
    int a = -1;
    bas = x.bas;
    do
    {
        a++;
    } while (x.val[a] != '\0');
    delete[]val;
    val = new char[a + 1];
    int i;
    for (i = 0; i <= a; i++)
        val[i] = x.val[i];
}
Number::~Number()
{
    delete[]val;
}
void Number::Print()
{
    std::cout << "Numarul este: " << val<< std::endl << "Baza este: " << bas<<std::endl;
}
int Number:: GetDigitsCount()
{
    int l = 0;
    do
    {
        l++;
    } while (val[l] != '\0');
    return l;
}

这是主要的:

int main()
{
    Number x("123", 10),y("111",10),z("0",10);
    z = y;
    z.Print();
}

我不断收到此错误:为RtlValidateHeap(010C0000,010C8DD8)指定了无效的地址如果我在main中进行此更改,则它可以正常工作,但实际上不是我想要的...

int main()
{
    Number x("123", 10),y("111",10);
    Number z = y;
    z.Print();
}

我该如何解决?我不知道...

约翰

您的Number班级缺少赋值运算符。由于您在main默认的赋值运算符中使用赋值运算符,因此在退出时将导致两次删除main,这将解释该错误。

它还说明了为什么在将main更改为使用复制构造函数而不是赋值运算符时错误消失了。

您应该查看复制和交换习惯用法,以显示如何轻松有效地实现复制构造函数和赋值运算符。

或者,您也可以使用std::string而不是手动分配内存。这样就无需编写析构函数,复制构造函数和赋值运算符。那是最好的解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

复制构造函数,析构函数和临时函数

来自分类Dev

c ++复制构造函数和析构函数

来自分类Dev

对象的构造函数和析构函数

来自分类Dev

构造函数和析构函数

来自分类Dev

复制构造函数,赋值运算符和析构函数代码重复

来自分类Dev

如果我还使用复制构造函数和重载=运算符,是否需要析构函数?

来自分类Dev

了解移动构造函数,std :: move和析构函数

来自分类Dev

对构造函数和析构函数的未定义引用

来自分类Dev

C语言中的构造函数和析构函数

来自分类Dev

静态成员变量的构造函数和析构函数(指针)

来自分类Dev

对构造函数和析构函数的未定义引用

来自分类Dev

模板类的构造函数和析构函数声明语法

来自分类Dev

构造函数和析构函数必须是虚拟的吗?

来自分类Dev

C ++中的析构函数和构造函数排序

来自分类Dev

构造函数和析构函数如何工作?

来自分类Dev

C ++复制构造函数错误

来自分类Dev

同时拥有复制构造函数和析构函数会导致段错误,但只有一个或多个不会

来自分类Dev

C ++构造函数/析构函数

来自分类Dev

构造函数错误

来自分类Dev

C ++对共享库中类的构造函数和析构函数的未定义引用错误

来自分类Dev

奇怪的python析构函数行为

来自分类Dev

奇怪的python析构函数行为

来自分类Dev

为什么添加析构函数会更改此结构的复制构造函数行为?

来自分类Dev

如果该类包含用户声明的析构函数,则复制构造函数是什么?

来自分类Dev

复制构造函数产生访问冲突之后,flann :: Index的析构函数

来自分类Dev

为什么添加析构函数会更改此结构的复制构造函数行为?

来自分类Dev

对象计数复制构造函数调用次数比析构函数调用次数多

来自分类Dev

节点和二叉树构造函数和析构函数分段

来自分类Dev

C ++复制构造函数错误地接受了参数

Related 相关文章

  1. 1

    复制构造函数,析构函数和临时函数

  2. 2

    c ++复制构造函数和析构函数

  3. 3

    对象的构造函数和析构函数

  4. 4

    构造函数和析构函数

  5. 5

    复制构造函数,赋值运算符和析构函数代码重复

  6. 6

    如果我还使用复制构造函数和重载=运算符,是否需要析构函数?

  7. 7

    了解移动构造函数,std :: move和析构函数

  8. 8

    对构造函数和析构函数的未定义引用

  9. 9

    C语言中的构造函数和析构函数

  10. 10

    静态成员变量的构造函数和析构函数(指针)

  11. 11

    对构造函数和析构函数的未定义引用

  12. 12

    模板类的构造函数和析构函数声明语法

  13. 13

    构造函数和析构函数必须是虚拟的吗?

  14. 14

    C ++中的析构函数和构造函数排序

  15. 15

    构造函数和析构函数如何工作?

  16. 16

    C ++复制构造函数错误

  17. 17

    同时拥有复制构造函数和析构函数会导致段错误,但只有一个或多个不会

  18. 18

    C ++构造函数/析构函数

  19. 19

    构造函数错误

  20. 20

    C ++对共享库中类的构造函数和析构函数的未定义引用错误

  21. 21

    奇怪的python析构函数行为

  22. 22

    奇怪的python析构函数行为

  23. 23

    为什么添加析构函数会更改此结构的复制构造函数行为?

  24. 24

    如果该类包含用户声明的析构函数,则复制构造函数是什么?

  25. 25

    复制构造函数产生访问冲突之后,flann :: Index的析构函数

  26. 26

    为什么添加析构函数会更改此结构的复制构造函数行为?

  27. 27

    对象计数复制构造函数调用次数比析构函数调用次数多

  28. 28

    节点和二叉树构造函数和析构函数分段

  29. 29

    C ++复制构造函数错误地接受了参数

热门标签

归档