我在大型程序中注意到这些调用序列如下:(调用堆栈的逆序)
// 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
中的值应该是随机值,因为调用尚未完成且尚未返回。
多处理/多线程?但是,可能的多处理/多线程如何使调用堆栈中的值不同?