[英]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.