簡體   English   中英

從函數指針C保存內存數據

[英]Save memory data from function pointers c++

我確實有一個函數,我需要它是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);

}

我的想法是獲取Vector的第一個值的地址,並以其大小獲取所有值,但是,當我在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;
}

我想我理解您的問題,但我不確定。 我假設您正在詢問有關將指針返回到另一個函數內部的幾個局部變量的問題。 我認為您需要在此處了解堆棧的工作原理。 當您調用分解函數時,您將在堆棧上創建一個新框架,並將其返回地址返回到main。 所有局部變量將被壓入堆棧。 一旦分解函數返回,該堆棧空間就可以自由地再次使用。

有沒有辦法維護與這些指針關聯的數據?

是! 在堆上分配變量。 在C ++中查找new 希望這可以幫助您指出正確的方向!

執行離開函數后,局部變量將消失。 您無法返回其地址,因為刪除的對象沒有地址。

編譯器可以將寄存器用於局部變量。 寄存器沒有有用的地址。

如果要返回變量的地址,請將其聲明為靜態:

double * some_function(void)
{
  static double pi = 3.14159264;
  return &pi;
}

另一種選擇是在動態內存中聲明變量並返回指針:

double * another_function()
{
   double * p_pi = new double(3.14159264);
   return p_pi;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM