Я имею следующую структуру кода:Странное поведение программы
[code 1]
cout << some_string << endl
cout << some_string << endl
cout << some_string << endl
cout << some_string << endl
cout << some_string << endl
[code 2]
Когда я удаляю cout
заявления, код 2 дает другой результат, когда он дает, когда cout
заявления присутствуют. Является ли это признаком утечки памяти?
Конкретный пример - от stitching_detailed.cpp от OPENCV. У меня есть следующий фрагмент кода:
// code 1 - edit added cameras initialization
vector<CameraParams> cameras(0);
HomographyBasedEstimator estimator;
theRNG().state = 0;
estimator(features, pairwise_matches, cameras);
for (size_t i = 0; i < cameras.size(); ++i)
{
theRNG().state = 0;
Mat R;
cameras[i].R.convertTo(R, CV_32F);
cameras[i].R = R;
LOGLN("Initial intrinsics #" << indices[i]+1 << ":\n" << cameras[i].K());
}
// cout statements
for (size_t i = 0; i < cameras.size(); ++i)
{
cout << cameras[i].aspect << endl;
cout << cameras[i].focal << endl;
cout << cameras[i].K() << endl;
cout << cameras[i].ppx << endl;
cout << cameras[i].ppy << endl;
cout << cameras[i].R << endl;
cout << cameras[i].t << endl;
}
// code 2
theRNG().state = 0;
Ptr<detail::BundleAdjusterBase> adjuster;
if (ba_cost_func == "reproj") adjuster = new detail::BundleAdjusterReproj();
else if (ba_cost_func == "ray") adjuster = new detail::BundleAdjusterRay();
else
{
cout << "Unknown bundle adjustment cost function: '" << ba_cost_func << "'.\n";
return -1;
}
theRNG().state = 0;
Mat_<uchar> refine_mask = Mat::zeros(3, 3, CV_8U);
if (ba_refine_mask[0] == 'x') refine_mask(0,0) = 1;
if (ba_refine_mask[1] == 'x') refine_mask(0,1) = 1;
if (ba_refine_mask[2] == 'x') refine_mask(0,2) = 1;
if (ba_refine_mask[3] == 'x') refine_mask(1,1) = 1;
if (ba_refine_mask[4] == 'x') refine_mask(1,2) = 1;
adjuster->setRefinementMask(refine_mask);
adjuster->setConfThresh(conf_thresh);
(*adjuster)(features, pairwise_matches, cameras);
Если удалить cout
заявления, камеры [х] .focal является NaN. Если я сохраняю cout
, то камеры [x] .фокал имеют допустимые значения.
Я знаю, что его не много, чтобы дать, но я в конце своих усилий, чтобы отладить его. Любая помощь в отладке проблемы приветствуется. Даже если вы знаете стандартный способ отладки, сообщите мне.
' Является ли это признаком утечки памяти? Нет, [неопределенное поведение] (https://en.wikipedia.org/wiki/Undefined_behavior). –
Вы использовали отладчик, чтобы пройти через линии и посмотреть переменные? –
@ Torbjörn Я использую интерфейс CLI/C++ для этого кода на C++. Отладка C#, C++/CLI, кода на C++ слишком сложна в Visual Studio. Короче говоря, я не могу пройти через это. – ubaabd