如何将void *转换为std :: vector <std :: vector <std :: string>&gt; *?</std :: vector <std :: string>

时间:2015-02-13 17:57:13

标签: c++ memory vector stl new-operator

我的代码的某些部分如下所示。 这里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;
 }

这样可行:)

1 个答案:

答案 0 :(得分:0)

通过演员,您声称data指向了矢量。如果那不是真的,那就不行了。

您必须首先创建一个向量,并确保指向它的指针将作为data传递(无论来自哪里)。例如,它可能看起来类似于:

db.set_callback_data(new std::vector<std::vector<std::string> >);