我让这个沙盒代码更复杂:
#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 *替换值,以存储任何基本日期之王不仅浮动数据。
谢谢!
答案 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;
}
顺便说一句。我没有深入挖掘你的代码,......