函数结束后的seg错误(C ++)

时间:2014-02-12 11:51:48

标签: c++ segmentation-fault void

我遇到了一个段错:11当我运行一个特定的程序时。在将系统升级到Mac OS X 10.9之前,我觉得这个问题不存在,但我可能只是忽略了它。

无论如何,我的功能如下:

// 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行只是检查我是否已经正常运行(我有)。有关为什么会在这里发生分裂的任何想法?我很欣赏在没有看到单个函数调用的内容的情况下可能很难说,所以如果有必要我会添加它们。

它实际上并不重要,因为这个函数是最后一个被调用的东西(所以seg错误不会中断任何东西),但我仍然宁愿深究它!

1 个答案:

答案 0 :(得分:5)

在函数之后发生的唯一事情是析构函数调用。检查所有局部变量的析构函数。看起来ObjectiveFunction是唯一不是原始或标准库容器的局部变量,因此请检查ObjectiveFunction::~ObjectiveFunction()是否存在潜在问题。