函数体内的值与传入的值不同

时间:2018-04-24 11:41:30

标签: c++ multithreading visual-studio visual-studio-2017 multiprocessing

我在大型程序中注意到这些调用序列如下:(调用堆栈的逆序)

// 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);
      }
    ...
}

断点位于呼叫步骤3的for循环内。当我在呼叫步骤3中检查names的值时,它具有&#34; a&#34;和&#34; b&#34;在向量而不是&#34; name&#34;和&#34;元素&#34;。但是,在visual studio调用堆栈窗口中,当我检查fieldNames中的值时,它们是&#34; name&#34;和&#34;元素&#34;。

所以我不明白这是怎么发生的。此外,步骤2中的fieldNames通过引用步骤3

我认为第1步的fieldNames中的值应该是随机值,因为调用尚未完成且尚未返回。

多处理/多线程?但是,可能的多处理/多线程如何使调用堆栈中的值不同?

0 个答案:

没有答案