我有一个函数,我需要它是void
类型并传递并获取它的指针:
void cracking::decompose(char input[][100], int size_S, double* &Atm, int* &ID, int &size_out);
{
vector<double> AtmD;
vector<int> XsD;
...
Atm = &AtmD[0];
ID = &XsD[0];
size_out = size(AtmD);
}
我的想法是获取向量的第一个值的地址,并且其大小我可能能够获得所有值,但是当我在主函数中调用它时它会构建但是这个内存中的数据地址被删除,我只得到垃圾。有没有办法保持与这些指针相关的数据?
这里是如何在main中调用函数:
int main()
{
char oi[900][100] = { "1 0.5 C", "2 0.55 N", "3 .5 S" };
double* xAtm = NULL;
int* xXs = NULL;
int tamanho;
cracking calc;
calc.decompose(oi, 3, xAtm, xXs, tamanho);
return 0;
}
答案 0 :(得分:1)
我想我理解你的问题,但我不完全确定。我假设您要求将指针返回到另一个函数内的一些局部变量。我认为你需要理解的是堆栈是如何工作的。调用分解函数时,在堆栈上创建一个新帧,返回地址为main。所有局部变量都将被压入堆栈。一旦分解函数返回,该堆栈空间可以再次被重用。
有没有办法保持与这些指针相关的数据?
是的!在堆上分配变量。在C ++中查找new
。希望这有助于指明您正确的方向!
答案 1 :(得分:1)
执行离开函数后,局部变量将消失。您无法返回地址,因为已删除的对象没有地址。
编译器可以使用寄存器作为局部变量。注册表没有有用的地址。
如果要返回变量的地址,请将其声明为static:
double * some_function(void)
{
static double pi = 3.14159264;
return π
}
另一种方法是在动态内存中声明变量并返回指针:
double * another_function()
{
double * p_pi = new double(3.14159264);
return p_pi;
}