簡體   English   中英

從指向數組的 function 返回指針時出錯

[英]Error in returning a pointer from a function that points to an array

我有點不知所措,因為我不知道為什么我的代碼在編譯時會出現以下錯誤:

1>..\SA.cpp(81) : error C2664: 'CFE' : cannot convert parameter 1 from 'int' to 'int []'
1>        Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast

本質上,我正在嘗試:

Step1:使用以下方法將向量轉換為數組:

int* VecToArray(vector<int> Vec)
{
    int ary[Vec.size()];

    for(int i = 0; i < Vec.size(); i++)
        ary[i] = Vec[i];

    return ary;
}

步驟2:調用一個function,其中數組是一個參數,它從新生成的數組中返回一個指針:

int* CFE(int density[])
{
   ...do stuff to generate 'double Energy[]'....

    return Energy;
}

第 3 步:在第三個 function 中使用此指針來計算 Energy[] 的總和:

double ObjFunction (double *E_Array) 
{
    double SumEnergy = 0;

    int n = 10; // Is irrelivant

    for (int i = 0; i < n; i++)
    {
        SumEnergy += E_Array[i];
    }

    return SumEnergy;
}

為了簡化編碼,我使用了這樣的函數,其中 VectorName 是 integer 向量:

double TotalEnergy = ObjFunction ( CFE ( VecToArray ( VectorName ) ) );

我顯然在某個地方弄錯了參數類型,盡管我自己也不明白為什么。 任何有經驗的人都可以幫助發現它/它們嗎?

Energy從何而來? 如果它是一個double[]那么你不能把它轉換成一個int*

std::vector<int>保證是連續的,因此如果要將std::vector<int> VectorName轉換為const int*使用&VectorName[0] 另一方面,如果您的 CFE function 修改了數組,則最好在本地創建它。

不確定編譯器錯誤,但如果您從 function 返回本地數組,您將遇到大問題。

第 1 步有幾個問題:

  • 您正在嘗試創建一個可變大小的數組。 您不能在 C89 或 C++ 中執行此操作(我認為 C99 添加了此內容)。
  • 您正在返回一個指向已超出 scope 的局部變量的指針。

你應該解決這個問題:

int ary[Vec.size()];

至:

int *ary = new int(Vec.size());

編譯器在編譯時不知道 Vec.size(),因此它無法創建數組。

確保稍后釋放 memory。

那就是解決問題。 但是,我認為你的方法也不好。 Vector 與常規數組的性能幾乎相同,但更安全,更易於使用。 為什么不直接使用向量?

即使您決定使用 arrays,按值傳遞它們也不是很有效。 特別是因為您立即將 output 重定向到另一個 function。 我寧願使用參考來解決這類問題。

您不能創建具有動態評估大小的數組。 您不能返回本地定義的數組。

但是,您可以將 &myVector[0] 視為一個數組。

暫無
暫無

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

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