【发布时间】:2014-04-03 20:53:46
【问题描述】:
我不确定为什么会这样:
main.cpp:
int main(int argc, char * argv[]) {
Pwm_Info tf_info;
tf_info = get_pwm_info(library_data, motif_name);
}
Gen.cpp
struct Pwm_Info {
std::string motif_name;
int width;
std::vector < double > pwm;
Pwm_Info(): motif_name(0),
width(0),
pwm(0) {}
}
TF_info;
Pwm_Info get_pwm_info(std::string library_data, std::string motif_name) {
std::vector < double > double_list;
strtk::parse(pwm_block, " \n\r", double_list);
std::cout << double_list.size() << std::endl;
Pwm_Info TF_info;
TF_info.motif_name = motif_name;
TF_info.width = n_width;
std::vector < double > * pointer;
std::vector < double > * pointer2;
pointer = & TF_info.pwm;
pointer2 = & double_list; * pointer = * pointer2;
std::cout << TF_info.pwm[1] << std::endl;
TF_info.pwm = double_list;
return TF_info;
}
之前,我删除了指向 TF_info 和双列表的指针,只剩下一行:
TF_info.pwm = double_list;
... 这导致了 SegFault。 相互创建和分配指针(指针和指针2)有什么意义?
【问题讨论】:
-
您能否提供一个简单的示例来演示没有您的所有 library_data、motif_name、Pwm_Info、TF_info 等的问题。你能理解这样的代码很难看懂吗?!
-
你之前留过印刷线吗?您提出的修改实际上是完全合法的。
-
好吧,如果
std::cout << TF_info.pwm[1] << std::endl;在TF_info.pwm = double_list;之前并且指针部分不存在,那么它当然不会工作(TF_info.pwm的原始长度:0。 -
@Nabla,你完全正确。
标签: c++ pointers vector struct segmentation-fault