gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:49:35 24 4
gpt4 key购买 nike

我在为类函数赋值时遇到问题。我正在尝试使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com