【发布时间】:2015-02-13 17:57:13
【问题描述】:
下面给出了我的代码的某些部分。
这里 m_out 定义为:static_cast<std::vector<std::vector<std::string> >* m_out;
问题出在给定行 m_out->push_back(row); 中。我得到“分段错误(核心转储)”,当我调试时,我发现上面给定行中的原因。
我认为,这是因为 for m_out 没有分配内存。如果是这样,我如何为给定的二维向量分配内存?
int some_space::database::callback(void* data, int argc, char** argv, char** col_name)
{
if(m_out != 0) {
m_out->clear();
}
m_out = static_cast<std::vector<std::vector<std::string> >*>(data);
std::vector<std::string> row;
for(int i = 0; i < argc; ++i){
row.push_back(argv[i] ? argv[i] : "(NULL)");
}
m_out->push_back(row);
return 0;
}
谢谢大家。我解决了我的问题。我改变了这样的代码。
现在 m_out 是一个变量而不是指针static_cast<std::vector<std::vector<std::string> > m_out;。
int some_space::database::callback(void* data, int argc, char** argv, char** col_name)
{
if(m_out.size() != 0) {
m_out.clear();
}
for( int i = 0; i < 6; i++ ) {
m_out.push_back(std::vector< std::string >());
}
for(int i = 0; i < argc; ++i) {
m_out[i].push_back(std::string( (char *)argv[i] ? argv[i] : "(NULL)"));
}
return 0;
}
这很好用:)
【问题讨论】:
-
你不说你得到了什么错误......
-
什么是
m_out?您的最小测试用例在哪里? -
我在线路上得到“分段错误”:m_out->push_back(row);
-
m_out 是 static_cast<:vector> >* m_out;
-
我看不出你创建行的方式有什么问题,所以 m_out 必须为空。
标签: c++ memory vector stl new-operator