我试图理解为什么将指针作为参数传递会导致我丢失函数内的整个指针信息。
我的问题并不复杂,我只是提供了足够的代码来为您提供上下文,万一您需要。但我觉得这是一个非常基本/基本的问题
这是与我的问题相关的课程设置
class node
{
public:
node();
node( char n_type,int n_xcoordinate, int n_ycoordinate, int n_elevation);
node(const node & source);
void connect(node* connection);
void copy_elements(node* ptr);
~node();
void ndisplay();
protected:
int nxcoordinate;
int nycoordinate;
char ntype;
int nelevation;
node* next;
};
class graph
{
public:
graph();
graph(const graph & source);
void add( node * element);
void connect_vertices(node* ptr1, node* ptr2);
// ~graph();
void g_display();
protected:
node** adj_list;
int count;
基本上,当我将它们作为参数传递时,我正在失去指针
所以我设置了一个数组节点指针。我用这个功能指出它们的相关节点。 WORKS
void graph::add( node * element)
{
while(count < 3)
{
adj_list[count] = element;
count ++;
break;
}
然后使用此功能,检查是否所有内容都已到位,确实如此。 ndisplay
类的函数node
打印出对象元素的值。工作和打印一切正确
void graph::g_display()
{
for (int i = 0; i<3; i++)
{
adj_list[i]->ndisplay();
}
}
但是当我打电话给adj_list[count]-> connect(adj_list[count-1]
时。我在connect
函数中得到了seg错误,这是node
函数之一,因为对象数据成员(作为参数传递的节点)是空的(指针没有指向正确的位置)
我尝试使用包装器函数来理解实际发生的事情,所以当我将下面的函数调用为connect_vertices(adj_list[count],adj_list[count-1])
时,只要我将指针作为{{{}的参数传递就会实现 1}}函数,它们已经消失了。(又名,指针没有指向正确的位置?)
node
我认为传递指针是安全的,因为你传递了内存地址?你能看到/指导我解决问题的根源吗?