首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++调试错误: HEAP_CORRUPTION_DETECTED

C++调试错误: HEAP_CORRUPTION_DETECTED
EN

Stack Overflow用户
提问于 2021-11-27 07:06:16
回答 1查看 42关注 0票数 0

我不知道为什么我会得到这个错误。但我认为,当我从数据类创建临时对象时,问题时有发生。当我创建一个没有参数的对象时,自动设置大小为1。然后我设置temp.size =对象的大小。但我认为它只是暂时设定了大小。当我尝试调用sum_up函数时,temp再次等于1。我不知道,只是点子而已。你能帮帮我吗?

这是我的库文件;

代码语言:javascript
复制
#include <iostream>

using namespace std;

class dataclass {

private:
    int* data;
    int size;
public:
    dataclass(int size = 1) : size(size) {
        data = new int[size];
        cout << "Constructor works !" << endl;
        cout << "Created an array with" << size << " elements." << endl;
    }

    dataclass(const dataclass& k) {
        cout << "Copy constructor works! " << endl;
        this->size = k.size;
        data = new int[size];
        for (int i = 0; i < size; i++)
        {
            data[i] = k.data[i];
        }
        cout << "Created an arrray with " << k.size << " elements." << endl;
    }

    ~dataclass() { delete[] data; cout << "Destructor works. Array deleted" << endl; }

    const int* getData()const {
        return data;
    }

    int getSize() { return size; };
    void setSize(int size) { this->size = size; };
    void print()const
    {
        for (int i = 0; i < size; i++)
        {
            cout << data[i] << " ";
        }
        cout << endl;
    }

    void set(int idx, int value) {
        if (idx < size)
        {
            data[idx] = value;
        }
    }

    dataclass sum_up(const dataclass& k)const
    {
        if (size == k.size)
        {
            dataclass temp;
            temp.size = size;
            for (int i = 0; i < size; i++)
            {
                temp.data[i] = data[i] + k.data[i];
            }
            return temp;
        }
    }
};

和main.cpp

代码语言:javascript
复制
#include <iostream>
#include "DataClass.h"
using namespace std;
int main()
{
    dataclass k(3); // create an array with 3 elements (blank now)
    for (int i = 0; i < k.getSize(); i++)
    {
        k.set(i, i+2); 
        /* 
           fill the array with for loop; set the index elements like this;
           set(0,2)
           set(1,3)
           set(2,4)
        */
    }
    k.print(); // print the array's elements.

    dataclass k1 = k; // copy constructor
    k.print(); // again print k values
    k1.print(); // and created by copy constructor k1's values.
    cout << endl << endl;

    (k.sum_up(k1)).print(); // sum up the data



    return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2021-11-27 07:15:29

这个问题是由我创建temp对象的方式引起的。按如下方式更改代码修复了此问题:

代码语言:javascript
复制
    dataclass sum_up(const dataclass& k)const
    {
        if (size == k.size)
        {
            dataclass temp(size);
            for (int i = 0; i < size; i++)
            {
                temp.data[i] = data[i] + k.data[i];
            }
            return temp;
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70132714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档