c++ - 无法使用构造函数为类函数赋值

标签 c++

我在为类函数赋值时遇到问题。 我正在尝试使用 dqr 构造函数分配值,但这些值未传递给 dqr 类的构建成员函数。 它显示的错误是段错误。

class dqr{
    int block_size;
    int *blocks;
    public:  
    dqr(int input[], int);   
    void build(int input[], int n);
    void update(int input[],int,int , int);

    };
     dqr::dqr(int input[], int n){

        int block_size=(sqrt(n));
        cout<<"block Size :"<<block_size;
        int *blocks=new int[block_size];
    } 
    void dqr::build(int input[], int n ){
        for(int i=0;i<(n-1);i++){
            blocks[i/block_size]+=input[i];}
    for(int i=0;i<block_size;i++){
       cout<<blocks[i];
    } }
    int main() 
    {
        int input[] = {1, 5, 2, 4, 6, 1, 3, 5, 7, 10};
        int n = sizeof(input)/sizeof(input[0]);
        dqr d(input, n);
        d.build(input,n);

        return 0; 
    }

最佳答案

您的代码的主要问题是构造函数中的这一行:

int *blocks=new int[block_size];

指针int *blocks 与成员指针int *blocks 不同。发生的事情是,您在构造函数中创建了一个名为 blocks 的本地指针,一旦您离开构造函数的范围,该指针就会消失。不幸的是,您已经在本地指针指向的堆中分配了内存。但是当本地指针死亡并且发生泄漏时,该内存不会被释放。

int block_size 也有同样的问题,您也在构造函数中将其重新创建为局部变量。

你的构造函数应该是这样的:

dqr(int input[], int n)
{
    block_size = sqrt(n); //using the member variable block_size.
    std::cout<< "block Size :" << block_size <<std::endl;
    blocks = new int[block_size]; //using the member pointer blocks.
}

我仍然不太清楚为什么您将 n 的平方根作为您的新 block 大小,但我想这是您设计的一部分。

另外不要忘记在析构函数中清除内存。事实上,这就是我们使用智能指针的原因。在你的例子中,一个 unique_ptr将是最佳选择。

示例代码:https://rextester.com/CGFQQ92378

关于c++ - 无法使用构造函数为类函数赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55334707/

相关文章:

c++ - 旧版 MySQL 连接器 C++ 使用 sql::ConnectOptionsMap 异常

c++ - 我的哈希函数有问题吗

c++ - RPath 不适用于从 CMake 生成的 Make Install

c++ - 重载 "operator++"返回非常量,并且 clang-tidy 提示

c++ - QtQuick2 和 C++ : Using a Repeater

c++ - boost spirit : combining preparsing with keyword parser and with Nabialek trick

c++ - 有没有办法将 std::stack<pointer> 转换为 std::stack<const pointer>?

c++ - 在接收管道数据的应用程序中使用 mmap() 吗?

c++ - 如何初始化作为结构指针的类成员

c++ - c++中的队列指针和动态分配