簡體   English   中英

如何將void *轉換為std :: vector <std::vector<std::string> &gt; *?

[英]How to convert void* to std::vector<std::vector<std::string> >*?

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

這工作正常:)

使用演員表,您聲稱data指向矢量。 如果這不是真的,這將無效。

您必須首先創建一個向量,並確保指向它的指針將作為data傳遞(無論來自何處)。 例如,它可能看起來類似於:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM