这是我第一次提问。论坛对我来说非常有帮助,所以我会尝试,只给你多汁的部分:
我有两个函数,一个是搜索函数,它通过指针搜索预先创建的二进制搜索树(我可以通过不同的函数显示搜索树,因此我知道它已填充)用于特定值。它将来自该节点的信息放入具有相同类型的变量(int,float和string)的预定义数据结构Nubline中,然后返回该数据结构。
这是我的代码:
struct node
{
int id;
string name;
float balance;
node *left;
node *right;
};
node *rootID, *rootName;
struct Nubline
{
int ID;
string Name;
float Amnt;
};
//Search function; the node is a pointer to a linked list with move id's node *left and node *right;
Nubline SearchbyID(node* &t, int x)
{
if (t != NULL)
{
if (t->id == x)
{
Nubline r;
r.ID = t->id;
r.Name = t->name;
r.Amnt = t->balance;
return r;
}
SearchbyID(t->left, x);
SearchbyID(t->right, x);
}
}
//function that calls the search function
void BalancebyID()
{
int num;
cout << "\tWhat is your ID number? "; cin >> num;
Nubline duke = SearchbyID(rootID, num);
cout << "\t\t"<< duke.Name << " your balance is $" << duke.Amnt;
}
void main()
{
//calling statement
BalancebyID();
system("pause");//pausing to view result
}
它会抛出以下错误:
Expression: "(_Ptr_user & (_BIG_ALLOCATION_ALIGNMENT -1)) == 0
我认为我已经将问题缩小到函数初始化,因为我可以使函数void并且它运行(当然没有所有其他代码)。我也可以使函数无效,设置Nubline类型的任意全局变量并将其放在变量“r”的位置,然后在我的BalancebyID函数中使用它,但它只显示零,所以我可以假设它没有填充。 / p>
对不起啰嗦的帖子感到抱歉。
Tl; dr:我如何创建一个返回数据结构的函数?
答案 0 :(得分:1)
为确保SearchbyID
正常工作,您应将return
添加到所有条件中。
此外,您可以返回Nubline*
类型,然后您可以返回nullptr
来表示找不到任何内容。
Nubline* SearchbyID(node* t, int x)
{
if(t == nullptr) return nullptr;
//else
if (t->id == x)
{
auto r = new Nubline();
r->ID = t->id;
r->Name = t->name;
r->Amnt = t->balance;
return r;
}
auto pLeft = SearchbyID(t->left, x);
if (pLeft) return pLeft;
return SearchbyID(t->right, x);
//return NULL if nothing found
}
答案 1 :(得分:0)
好的,这是我的解决方案:
我取消了该函数,使用了全局变量Nubline r;
并将t
设置为如下:
void SearchbyID(node* &t, int x)
{
if (t != NULL);
{
if (t->id == x)
{
r.ID = t->id;
r.Name = t->name;
r.Amnt = t->balance;
}
//I also changed this to make it more efficient and not throw an access violation up by the if(t->id == x) statement
if (x < t->id)
{
SearchbyID(t->left, x);
}
if (x > t->id)
{
SearchbyID(t->right, x);
}
}
}
//PART B
//Option 1: show Balance when ID is given
void BalancebyID()
{
int num;
cout << "\tWhat is your ID number? "; cin >> num;
SearchbyID(rootID, num);
cout << "\t\t"<< r.Name << " your balance is $" << r.Amnt;
}
这对我有用。谢谢大家的解决方案;它帮助我隔离了问题并找到了解决方案。