簡體   English   中英

Cpp: cout 為每次嘗試產生不同的輸出而不更改代碼

[英]Cpp: cout produces different output for each try without changing the code

在我的 cpp 代碼中,我正在迭代四個 geotiff 圖像,並希望以圖像編號為第一個,geotiepoints 為第二個,成對提取它們的 geotiepoints(坐標)。 接下來,我想將它們推入類型對的全局向量中以供以后使用。 這是我當前的代碼:

//Global Variable 
std::vector <std::pair<short, double*>> GeoTPWithNr;

//for each file in directory
void GetGeoTiePoints(TIFF* tif)
{
    unsigned short count;
    double* Geotiepoints;
    std::pair<short, double*>TiepointsWithNumber;
    TiepointsWithNumber.first = filenumber;

    TIFFGetField(tif, TIFFTAG_GEOTIEPOINTS, &count, &Geotiepoints)
    TiepointsWithNumber.second = Geotiepoints;
    GeoTPWithNr.push_back(TiepointsWithNumber); 

    std::cout << GeoTPWithNr[0].second[3] << std::endl;
    std::cout << GeoTPWithNr[0].second[4] << std::endl;
}

為了測試代碼,我想在位置 0 處打印向量的連接點。我期望的是連接點值的四倍。 當我第一次運行代碼時它起作用了,我得到了以下結果: 在此處輸入圖像描述
然而,每次我運行我的代碼時,我都會得到不同的結果,即使我沒有更改我的代碼中的任何內容。
在此處輸入圖像描述

當我打印我的對的值時,在我將它推入向量之前,我總是得到正確的結果。 因此,在嘗試將該對推入向量或從向量中檢索值時似乎存在問題。

問題出在哪里? 我想這與結果如何寫入向量有關。 有誰知道如何解決這個問題?

謝謝和最良好的祝願

如果我正確理解了這個問題,我的代碼不會將實際值寫入聲明的對,而只會寫入指向這些值的指針。 當編譯器完成函數時,它會刪除這些值,因此在循環的下一次迭代中,指針會指向其他地方。

因為我找不到將實際數組寫入一對的方法,所以我將這對替換為:

std::vector <std::array <double, 7>> GeoTPWithNr;

在位置 7,我在 pair.first 寫入我想寫入的值。 現在我將值寫入全局變量而不是指針,我的輸出穩定且正確。

暫無
暫無

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

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