Я новичок в .Net и пытаюсь использовать управляемые потоки.Я не смог найти никаких проблем в своем коде, но это вызывает исключение, когда поток заканчивается.Что-то вроде: Необработанное исключение в 0x5cbf80ea (msvcr90d.dll) 0xC0000005: Место чтения нарушения доступа 0x000000d7.
#include "stdafx.h"
using namespace System;
using namespace System::Threading;
#define sz 100
//int dt[sz]; //allcating a gloal buffer
int *dt;
void workerThread (void)
{
Console::WriteLine("Producer Thread Started!");
int data = 50;
for(int i=0; i<sz; i++)
{
Thread::Sleep(1);
dt[i] = i;
Console::WriteLine("Producer W={0}", i);
};
Console::WriteLine("Producer Thread Ending");
}
int main(array<System::String ^> ^args)
{
Console::WriteLine("This is a test on global variable and threading");
//allcating a buffer
dt = new int(sz);
Thread ^wthrd = gcnew Thread(gcnew ThreadStart(&workerThread));
//Starting Worker Thread..
wthrd->Start();
//Waiting for Worker Thread to end.
wthrd->Join();
Console::WriteLine("Worker Thread Ended.");
Console::ReadKey();
return 0;
}
Однако это работает нормально, когда я выделяю буфер как глобальный массив.Это исключение возникает, когда я использую ключевое слово "new", отсюда и динамическое распределение памяти.Я делаю какие-то фундаментальные ошибки?Это что-то, связанное с сборщиком мусора?или неуправляемая куча, выделенная ключевым словом "new"?Я действительно предпочел бы иметь этот буфер в неуправляемой куче.Хотя я пишу управляемый код, многие другие библиотеки DLL, которыми я пользуюсь, неуправляемы.