如何在不重写的情况下保留c ++中指针的值

时间:2016-12-02 17:50:11

标签: c++ pointers overwrite

我让这个沙盒代码更复杂:

#include <sstream>
#include <iostream>
#include <vector>

using namespace std;

class Table
{
    friend class Variable;
public:
    Variable * variables[1021];
};

class Variable
{
    friend class Nodo;
public:
    char clas;
    Nodo * ini;
};

class Nodo
{   
public:
    char clas;
    Variable * father;
private:
    float * value;
public:
    Nodo();
    void set_value(float);
    float * get_value();
};


Nodo::Nodo()
{
    clas = ' ';
    father = NULL;
    value = NULL;
}

void Nodo::set_value(float m)
{
    float * r = new float();
    r = &m;
    value = (float *)r;
}

float * Nodo::get_value() 
{
    return this->value;
}

这是主要的:

void main ()
{
    Nodo * n = new Nodo();    // OK.
    n->set_value(5.3442);     // Ok. 

    Variable * v = new Variable();      // This is the problem.

    // When I declare another pointer an initilized it, n lost the value stored in value. 

    Variable * v0 = new Variable();   // Here the same.  
    v->ini = n;
    n->father = v;

    Table * t = new Table();
    t->variables[0] = v;

    v0 = t->variables[0];

    cout << *(static_cast<float *>(v0->ini->get_value())) << endl;
}

如何在不改变的情况下存储指针中的值?似乎我应该使用const或类似的东西,但我不知道如何。将字段值声明为私有值无济于事。这个想法是用以后的void *替换值,以存储任何基本日期之王不仅浮动数据。

谢谢!

1 个答案:

答案 0 :(得分:1)

这看起来不对:

void Nodo::set_value(float m)
{
    float * r = new float();
    r = &m;
    value = (float *)r;
}

r被赋予指向m的指针,这是一个临时指针,一旦set_value完成,该指针将无效。你也覆盖r值,所以你在这里有泄漏。正确的版本是:

void Nodo::set_value(float m)
{
    float * r = new float();
    *r = m;
    value = r;
}

顺便说一句。我没有深入挖掘你的代码,......