[英]Segmentation fault on string assignment in C++
看一下这个示例函数:
RuntimeConfiguration* conf_rt_conf() {
RuntimeConfiguration *conf;
conf = new RuntimeConfiguration();
conf->arch_path="./archive";
conf->err_log="./err_log";
conf->fail_log="./fail_log";
conf->msg_log="./msg_log";
conf->save="html, htm, php";
conf->ignore="jpg, gif";
conf->cookies="";
return conf;
}
这里的一切工作正常,但是当我运行如下命令时:
DatabaseInput** conf_db_input() {
DatabaseInput **db_input;
db_input=(DatabaseInput **)malloc(NUMB_SITES*sizeof(DatabaseInput *));
for (int i=0;i<NUMB_SITES;i++) db_input[0]= new DatabaseInput();
db_input[0]->full_name="ABCNews";
db_input[0]->alias="abcn";
db_input[0]->prefix="/eng";
db_input[1]->full_name="Rzeczpospolita";
db_input[1]->alias="rp";
db_input[1]->prefix="/pol";
return db_input;
}
第一次分配时出现细分错误。 它可能与为此结构分配的固定内存块有关。 我如何使其正常工作?
我会改变
for (int i=0;i<NUMB_SITES;i++) db_input[0]= new DatabaseInput();
以此为起点:
for (int i=0;i<NUMB_SITES;i++) db_input[i]= new DatabaseInput();
您的代码提示几个问题:
首先...您是否从未听说过(默认)构造函数? 这看起来像使用“ new”的C代码一样,这总是有点吓人。
其次,所有新分配的结构都存储在db_input[0]
,这似乎是错误的。
乍看之下
db_input [0] = new DatabaseInput();
我认为应该
db_input[i]= new DatabaseInput();
还建议检查malloc操作的结果
您的“ for”循环不需要引用db_input[i]
吗?
也许这样:
DatabaseInput *db_input[];
db_input = new DatabaseInput*[NUMB_SITES]; // Creates an array of pointers
for (int i=0; i<NUMB_SITES; i++) db_input[i]= new DatabaseInput();
可以工作吗? (我没有测试)
请注意,要释放使用的内存,您应该执行以下操作:
for (int i=0; i<NUMB_SITES; i++) delete db_input[i];
delete[] db_input;
也许,您应该使用db_input [i]
没有更多细节,我们将无法确定错误。 但有几点要点:
db_input[0]= new DatabaseInput();
它实际上用的是i而不是0,我只是尝试了几件事,并且在复制源代码时错过了那里的零,所以这不是答案。
===编辑===
db_input = new DatabaseInput*[NUMB_SITES];
奏效了,谢谢加斯顿:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.