c文字列のベクトルをc文字列の配列に変換しようとしています。これを試しましたが、正しく機能していないようです。
int glfxGetProgramList(int effect, char** progList, int* count)
{
std::vector<char*> list;
gEffects[effect]->GetProgramList(list);
fprintf(stderr, "Lib Output: %s\n", list[0]);
progList = &list[0];
int size = list.size();
memcpy(count, &size, sizeof(int));
}
stderrから返されるデバッグ出力は、関数内で正しいものです。ただし、プロジェクト内でこの関数を使用してリストの最初の項目を出力しようとすると、セグメンテーション違反でクラッシュします。これが私のプロジェクトのコードです:
char ** list;
int size;
glfxGetProgramList(effect, list, &size );
fprintf(stderr, "Output: %s\n", list[0]);
私が間違っていることについて何か考えはありますか?
編集:
問題の根底から始めなければならないと思います。名前のリストを取得しようとしているプライベートマップ配列があります。GetProgramListのコードは次のとおりです。
unsigned Effect::GetProgramList(vector<char*>& list) const
{
for(map<string,Program*>::const_iterator it=m_programs.begin(); it!=m_programs.end(); ++it)
list.push_back( (char*)it->first.c_str() );
}