c++ - 数组结构

标签 c++ pointers

我正在尝试制作一些自定义 vector ...

元素类,应该指向下一个类的地址,但使用此代码

class foo {
private:
    int attr;
public:
    foo(){attr = 10;}
    int get_attr(){return attr;}
    void set_attr(int a){attr =a;}
};

class element_foo {
private:
    foo data;
    element_foo *ptr_next;
public:
    element_foo(){ptr_next = NULL;}
    element_foo(int dat){data.set_attr(dat); ptr_next = NULL;}
    element_foo(int dat, element_foo next){
        data.set_attr(dat);
        ptr_next = &next;
    }
    foo get_data(){return data;}

    element_foo get_next(){return *ptr_next;}

    void print_array(){
        if (ptr_next == NULL) {
            std::cout<< data.get_attr()<<std::endl;
        }
        else {
            std::cout<< data.get_attr()<<std::endl;
            this->get_next().print_array();
        }

    }
};



int main (int argc, char * const argv[]) {
    // insert code here...  
    element_foo a1(10);
    element_foo a2(15,a1);
    element_foo a3(20,a2);

    a3.print_array();

    std::cout << "Hello, World!\n";
    return 0;
}

当我打印 a3 时,它出现段错误...为什么?我的错误在哪里?

最佳答案

错误出现在这个构造函数中:

element_foo(int dat, element_foo next){
    data.set_attr(dat);
    ptr_next = &next;
}

您正在获取本地人的地址。 ptr_next = &next; 一旦函数结束,地址就无效。

您需要做的是将 next 作为指针传递:

element_foo(int dat, element_foo *next){
    data.set_attr(dat);
    ptr_next = next;
}

并将你的 main 更改为:

element_foo a1(10);
element_foo a2(15,&a1);
element_foo a3(20,&a2);

编辑:

或者,您可以通过引用传递它:

element_foo(int dat, element_foo &next){
    data.set_attr(dat);
    ptr_next = &next;
}

关于c++ - 数组结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7870802/

相关文章:

java - 等式 Java 数组中的奇怪之处 : References vs. 指针

c - 编写从文本中删除所有数字的程序

android - V8 独立应用程序仅在发布签名的 APK 时死于 SIGILL

c++ - 为什么 C++ 中的字符串文字 (char*) 必须是常量?

Java 等同于 c 函数调用

c++ - 什么时候将数据成员存储为引用而不是指针更可取?

c++ - Eclipse CDT - 将单个库与文件路径中的空格链接起来

c++ - 我可以将任意源 IP 绑定(bind)到套接字吗?

c++ - 对于非常多的点,找出三角形上或三角形内的点数?

c++ - 迷失在指针的世界里