结构成员变量的地址在通过引用传递时更改

时间:2015-03-13 11:35:30

标签: c++ eclipse debugging c++11

我在Eclipse CDT中调试我的模型(用C ++编写)时遇到了问题。问题是,当我通过引用将包含各种成员变量(如string或vector)的结构变量传递给函数时,某些成员变量的值不会在该函数的范围内更新。更多详情如下:

struct ModelConfig {
//... here are some other variables and constructors 

vector<int> crop_list;

string path_to_input;

//....
};

现在说我在GDB中开始调试,这是第一个函数调用:

void modelMain::setupModel( const ModelConfig & sim_setting ){
    //... some operations to configure the model using 'sim_setting'

    /* 1.3 - Initialize the land */

    Set_Environment(k_farm_land, sim_setting); 
      // breakpoint here, printing out the value of 'sim_etting' shows  'sim_setting.path_to_input = "data/"' ; Then I enter into 'Set_Environment' function ...

    //...
}

void Set_Environment(vector<Soil> & farm_land, const ModelConfig & sim_setting) {
int EXP_ID = sim_setting.EXP_ID;

string strTmp_a;

strTmp_a = sim_setting.path_to_input + "soil/parameters.txt"; // Problem is here: the GDB shows here that sim_setting.path_to_input = " ". I am expecting strTmp_a = "data/soil/parameters.txt" which now is "soil/parameters.txt" ;


//... operations for reading data
}

sim_setting.path_to_input变量应该包含名为data/的字符串值,这在setupModel(...)中的调用期间是正确的,但在此期间值丢失(或实际更改了地址)拨打Set_Environment(...) ...

在Eclipse中使用GDB调试来跟踪变量的地址时,我注意到sim_settingsetupModelSet_Environment的地址似乎是正确的,但成员变量是path_to_inputcrop_list已更改为其他位置,导致数据丢失。使用crop_list创建.push_back()的值。

由于我通过引用传递变量,所以我没有明白这一点。我唯一可以想象的是由于字符串和向量的值赋值。谁有理论呢?非常感谢你提前!

0 个答案:

没有答案