2014-02-12 63 views
1

我在運行特定程序時出現seg錯誤:11。我覺得像我之前升級我的系統的Mac OS X 10.9這個問題是不存在的,但它可能只是我忽略了它..函數結束後的seg fault(C++)

無論如何,我的函數看起來像:

// this applies a warp to the field given, and saves output. simple! 
void Apply(string warpName, string fieldName, bool conserve, string outName) { 

    // get lon, lat dimensions of warp 
    int noLongs = GetDimension(warpName, 3, "warp"); 
    int noLats = GetDimension(warpName, 2, "warp"); 

    int origNoLongs = noLongs, origNoLats = noLats; 

    // read in params 
    vector<double> params = ImportWarpFromNetCDF(warpName); 

    // rescale field to warp's dimensions, and read in 
    string tempName = "scaledField"; 
    ReScale(fieldName, tempName, noLongs, noLats); 
    vector<vector<vector<double> > >inIntensities = ImportFieldFromNetCDF(tempName); 
    RemoveFile(tempName); 

    // just enter inIntensities for ref image, and 1 for lambda, to keep objective function happy 
    ObjectiveFunction objective(inIntensities, inIntensities, conserve, 1, false); 
    objective.setParameters(params); 

    // output files 
    ExportOutputToNetCDF(objective, outName); 

    cout << "BAH?!" << endl; 

} 

其中COUT最後一行只是檢查我是否已經正確地結束了函數(我有)。任何想法爲什麼這將在這裏segfaulting?我很欣賞可能很難說沒有看到個別函數調用了什麼,所以我會在必要時添加這些函數。

它實際上並沒有太大的關係,因爲該功能被稱爲(所以賽格故障不會中斷任何東西)的最後一件事,但我還是寧願得到它的底部!

+0

如果'cout'之後,但返回的功能之前,那麼這將是在局部變量之一的析構函數的段錯誤發生。你的調試器應該告訴你它到底發生了什麼。 –

回答

5

出現這種情況的唯一的事「之後」的功能是析構函數調用。檢查所有局部變量的析構函數。它看起來像ObjectiveFunction是唯一不是原始或標準庫容器的局部變量,因此請檢查ObjectiveFunction::~ObjectiveFunction()是否存在潛在問題。

+1

非常出色 - 在〜ObjectiveFunction中有一個調用來刪除一個沒有爲這種類型的ObjectiveFunction設置的指針!我現在已經將這個刪除包裝在if子句中,這樣我們就不會嘗試刪除那些不存在的東西。非常感謝! – tiswas