編輯:我可以毫無問題兩次運行同一程序,同時 - 我怎麼能複製這個使用OpenMP或一些其他的方法?OpenMP:導致堆腐敗,任何人?
這是問題的基本框架。
//Defined elsewhere
class SomeClass
{
public:
void Function()
{
// Allocate some memory
float *Data;
Data = new float[1024];
// Declare a struct which will be used by functions defined in the DLL
SomeStruct Obj;
Obj = MemAllocFunctionInDLL(Obj);
// Call it
FunctionDefinedInDLL(Data,Obj);
// Clean up
MemDeallocFunctionInDLL(Obj);
delete [] Data;
}
}
void Bar()
{
#pragma omp parallel for
for(int j = 0;j<10;++j)
{
SomeClass X;
X.Function();
}
}
我已經證實,當一些內存試圖通過MemDeallocFunctionInDLL()
被釋放時,_CrtIsValidHeapPointer()
斷言失敗。
這是因爲兩個線程都寫入相同的內存?
因此,要解決這個問題,我想我會做SomeClass
私人(這是完全陌生的我,所以任何幫助表示讚賞)。
void Bar()
{
SomeClass X;
#pragma omp parallel for default(shared) private(X)
for(int j = 0;j<10;++j)
{
X.Function();
}
}
而且現在當它試圖在一開始分配內存Data
失敗。
注:如果需要,我可以改變的DLL
注:它運行完全沒有#pragma omp parallel for
編輯:現在Bar
看起來是這樣的:
void Bar()
{
int j
#pragma omp parallel for default(none) private(j)
for(j = 0;j<10;++j)
{
SomeClass X;
X.Function();
}
}
仍然沒有運氣。
也許不相關,但用new []分配的內存應該用delete []刪除。 – 2009-11-05 17:00:17
謝謝,知道了 - 並更新了。 – Jacob 2009-11-05 17:09:37