MetaDataクラスを使用してOracle表から列の名前を取得しようとしています。 ResultSetからMetaDataオブジェクトのベクトルを取得し、各項目のgetString()関数を実行してループします。問題は2番目の反復でループを終了して新しい反復を開始するときにクラッシュしますCrtIsValidHeapPointerアサーション。 pUserDataで指されているOracle OCCIでのCrtIsValidHeapPointerの問題MetaData :: getString
/*
* If this ASSERT fails, a bad pointer has been passed in. It may be
* totally bogus, or it may have been allocated from another heap.
* The pointer MUST come from the 'local' heap.
*/
_ASSERTE(_CrtIsValidHeapPointer(pUserData));
データが実際に有効であるので、私は外部のAPI DLLから私のヒープがCRTヒープと同じではありません疑い、質問はどのように私はこの問題を解決しますでしょうか?
私のコード:
std::vector<oracle::occi::MetaData> data = res->getColumnListMetaData();
for (std::vector<oracle::occi::MetaData>::iterator iter = data.begin(); iter != data.end(); iter++)
{
//Crash on second iteration after this statement
std::string s = (iter->getString(oracle::occi::MetaData::ATTR_NAME));
int i = iter->getInt(oracle::occi::MetaData::ATTR_DATA_TYPE);
std::cout << i << std::endl;
}
誰もが何か提案を持っていますか、誰もがこの問題を持っていたし、それを解決しましたか?もちろん、std::string
はヒープメモリを割り当て、割り当て解除し、ものの
OS = Windowsの、VS2008、オラクルそのコードで11.2