我正在使用外部庫中的「foo」類來計算和存儲大量數據。在完成計算後,我只想保留結果數據的數組,它佔「foo」大小的一半。 Foo用typeid PNSt3__17complexIdEE
提供功能RawResultsArray()
的結果數據指針。 到現在爲止,我一直在做這樣的:保持超出範圍的類的數據?
int N; //length of the results array
complex<double> * results_to_keep;
{
foo myFoo;
myFoo.findResults();
results_to_keep = new complex<double>[N];
for (auto i=0; i<N; i++)
{
results_to_keep[i] = myFoo.RawResultsArray()[i];
}
}
//work with results_to_keep in further code...
delete [] results_to_keep;
//do other memory intensive stuff in further code...
不過,我有限的記憶工作,買不起有results_to_keep
陣列,並在同一時間分配的myFoo
類。有沒有辦法將長度爲N*sizeof(complex<double>)
的數據保存在myFoo.RawResultsArray()
之後,在超出第14行的範圍之後再次暫時分配整個陣列?
我沒有成功玩智能指針。我想我最好的嘗試是:
std::unique_ptr<complex<double>[]> results_to_keep;
{
foo myFoo;
myFoo.findResults();
std::unique_ptr<complex<double>[]> temp (move(myFoo.RawResultsArray());
results_to_keep = move(temp);
}
//work with results_to_keep in further code...
results_to_keep.reset();
//do other memory intensive stuff in further code...
這樣,results_to_keep
併成功地保留數據,但我不能到最後一行再次釋放內存。它會拋出malloc: *** error for object 0x106000010: pointer being freed was not allocated
。
附加信息:typeid(myFoo.RawResultsArray()).name()
給出PNSt3__17complexIdEE
。我正在使用Apple LLVM 8.1編譯器。
這個程序用什麼方式寫在C中? –
您需要發佈foo類的定義,那麼我們可以說是否有可能將該數據移出它, – Slava
如何將該數據複製到您實際擁有的緩衝區中? – mutex36