看看这个示例函数:
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;
}
我在第一次分配时遇到分段错误。 它可能与为此结构分配的固定内存块有关。如何让它正常工作?
答案 0 :(得分:6)
我要改变
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();
答案 1 :(得分:3)
您的代码提示了几个问题:
答案 2 :(得分:2)
首先......你从未听说过(默认)构造函数吗?这类似于使用“new”的C代码,这总是有点可怕。
其次,所有新分配的结构都存储在db_input[0]
,这似乎是错误的。
答案 3 :(得分:2)
初看
db_input [0] = new DatabaseInput();
我认为应该是
db_input[i]= new DatabaseInput();
还建议检查malloc操作的结果
答案 4 :(得分:1)
你的'for'循环不需要引用db_input[i]
吗?
答案 5 :(得分:1)
也许这个:
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;
答案 6 :(得分:0)
也许,您应该使用db_input [i]
答案 7 :(得分:0)
如果没有更多详细信息,我们无法确定错误。但是有几点评论:
答案 8 :(得分:0)
db_input[0]= new DatabaseInput();
它实际上有i而不是0,我只是尝试了几个东西,并且在复制源代码时错过了那个零,所以这不是答案。
=== EDIT ===
db_input = new DatabaseInput*[NUMB_SITES];
这很有效,谢谢加斯顿:)