Значения внутри тела функции отличаются от значений, переданных в - PullRequest
0 голосов
/ 24 апреля 2018

Я заметил эти последовательности вызова в большой программе, как показано ниже: (обратный порядок стека вызовов)

// call step 1
std::vector<std::string> fieldNames = this->getUniqueMangledFieldNames(sigHierInfo); // fieldNames have "a"  and "b"

// call step 2
std::vector<std::string> SlFileIOBlockContext::getUniqueMangledFieldNames(
    const SlSigHierInfo *const sigHierInfo
    ) const
{
    std::vector<std::string> fieldNames(2);
    fieldNames[0] = "name";
    fieldNames[1] = "elements"
    slu::MLStructFieldNameUtil::getUniqueMangledNames(fieldNames, "signal");
    return fieldNames;
}

//call step 3
void MLStructFieldNameUtil::getUniqueMangledNames(std::vector<std::string> & names, 
                                                  const std::string & defPrefix)
{
    for(size_t idx=0; idx<numNames; ++idx) {
        //Mangle the name
        MLStructFieldNameUtil::mangleFieldName(names[idx], defPrefix);
      }
    ...
}

Точка останова находится внутри цикла for шага вызова 3. Когда я проверяюзначения names на шаге 3 вызова содержат «a» и «b» в векторе вместо «name» и «elements».Однако в окне стека вызовов Visual Studio, когда я проверяю значения внутри fieldNames, это «имя» и «элементы».

Так что я не понимаю, как это может произойти.Более того, fieldNames на шаге 2 передается со ссылкой на шаг 3

Я думаю, что значения в fieldNames шага 1 должны быть случайными значениями, поскольку вызов еще не завершен и еще не возвращен.

Multi-обработка / многопоточность?Но как, вероятно, Muti-processing / Multi-threading может изменить значения в стеке вызовов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...