c++ - 创建一个段树,但它仍然为空。我找不到错误?
问题描述
基本上我正在尝试传递需要存储新块地址的指针
void buildseg(class node *p,int a[],int l,int r)
{
class node *temp;
temp=createnode();
int sum=0;
for(int i=l;i<=r;i++)
{
sum=sum + a[i];
}
temp->val=sum;
temp->leftrange=l;
temp->rightrange=r;
if(root==NULL)
{
root=temp;
}
if(l!=r)
{
int q=(l + r)/2;
buildseg(temp->left,a,l,q);
buildseg(temp->right,a,q+1,r);
}
else{
temp->left=NULL;
temp->right=NULL;
}
p=temp;
}
class node{
public:
int val;
int leftrange;
int rightrange;
class node *left;
class node *right;
};
class node *root=NULL;
class node *createnode()
{
class node *p;
p=(class node*)malloc(sizeof(class node));
return p;
}
任何人都可以帮我解决错误所在。我们是否可以传递一个指针,我们必须在其中存储由 malloc 函数创建的块的地址。或者那里是错误的。
解决方案
您的函数原型void buildseg(class node *p,int a[],int l,int r)
使函数不可能更改调用者的第一个参数。
当你这样称呼它时:
class node *x = NULL;
void buildseg(x,a, 4, 5);
该行p=temp;
仅更改函数中的副本p
,但不会更改x
调用者。
您必须将第一个参数作为参考传递:
void buildseg(class node * &p,int a[],int l,int r)
推荐阅读
- python - 对 .txt 文件行进行排序会添加不正确的行
- c++ - Is C++ compiler allowed to store function ptr in register before its arguments are evaluated?
- c# - 如何在 DelegatingHandler 中读取发送到操作方法 (WebAPI) 的参数
- java - Java 不支持的内容编码:br
- python - 将 seaborn 传说分成两个不同的盒子
- python - 尝试从另一个文件夹导入时未找到模块错误问题
- node.js - 为什么 TypeORM 使用 FindOn(id) 生成两个查询
- reactjs - 如何使用 ant-Design 在反应表单中执行良好的密码验证
- iis - 随机获取登录提示
- xml - 序言中不允许内容,但序言在运行时可以吗?Groovy、Jenkins、Java、管道、XML