3
當我使用pin_ptr在本地c代碼中傳遞數組時,我得到訪問衝突。該代碼是波紋管:使用pin_ptr時訪問衝突?
array<float>^ LogLikelihoodScore(array<array<unsigned char>^>^ modelsBuffer , array<float>^ featuresArray, int numberOfFrames)
{
int i, j, modelsNum = modelsBuffer->Length, len;
float **models = (float**) malloc(modelsNum * sizeof(void*));
for(i = 0; i < modelsNum; i++)
{
pin_ptr<unsigned char> ptr = &modelsBuffer[i][0];
models[i] = (float*) ptr;
}
array<float>^ scores = gcnew array<float>(modelsNum);
pin_ptr<float> scoresPtr = &scores[0];
pin_ptr<float> featuresPtr = &featuresArray[0];
char* message = CalculateLikelihoodUsingBufferedModels(models, modelsNum, featuresPtr, numberOfFrames, scoresPtr);
return scores;
}
當我改變了這種代碼,這樣分配新的空間和複製原始數組到的是,我沒有得到訪問衝突。 新代碼:
array<float>^ LogLikelihoodScore(array<array<unsigned char>^>^ modelsBuffer , array<float>^ featuresArray, int numberOfFrames)
{
int i, j, modelsNum = modelsBuffer->Length, len;
float **models = (float**) malloc(modelsNum * sizeof(void*));
for(i = 0; i < modelsNum; i++)
{
len = modelsBuffer[i]->Length;
char* ptr = (char*) malloc(len);
pin_ptr<unsigned char> ptr2 = &modelsBuffer[i][0];
memcpy(ptr, ptr2, len);
models[i] = (float*) ptr;
}
array<float>^ scores = gcnew array<float>(modelsNum);
pin_ptr<float> scoresPtr = &scores[0];
pin_ptr<float> featuresPtr = &featuresArray[0];
char* message = CalculateLikelihoodUsingBufferedModels(models, modelsNum, featuresPtr, numberOfFrames, scoresPtr);
return scores;
}
問題:是否存在從pin_ptr用我的任何問題嗎?
我想你還沒有針對那個問題呃? –
你很幸運能夠早早擊中它。如果您在方法開始時分配了*分數*,那麼您偶爾會遇到一個非常偶然的堆損壞問題。您仍然需要修復內存泄漏。 –