我的代码的某些部分如下所示。
这里m_out的定义如下:static_cast<std::vector<std::vector<std::string> >* m_out;
问题出在给定的行m_out->push_back(row);
中。我得到“分段故障(核心转储)”,当我调试时,我发现上面给定行中的原因。
我认为,这是因为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;
}
这样可行:)
答案 0 :(得分:0)
通过演员,您声称data
指向了矢量。如果那不是真的,那就不行了。
您必须首先创建一个向量,并确保指向它的指针将作为data
传递(无论来自哪里)。例如,它可能看起来类似于:
db.set_callback_data(new std::vector<std::vector<std::string> >);