[英]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.