将对象指针作为参数传递时丢失整个指针信息

时间:2018-01-31 02:52:21

标签: c++ pointers arguments

我试图理解为什么将指针作为参数传递会导致我丢失函数内的整个指针信息。

我的问题并不复杂,我只是提供了足够的代码来为您提供上下文,万一您需要。但我觉得这是一个非常基本/基本的问题

这是与我的问题相关的课程设置

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

我认为传递指针是安全的,因为你传递了内存地址?你能看到/指导我解决问题的根源吗?

0 个答案:

没有答案