为什么这行代码会泄漏内存?

本文关键字:泄漏 内存 代码 为什么 | 更新日期: 2023-09-27 18:04:57

我发现了一行在我的项目中泄漏内存的代码。它是一个DllImport方法:

[DllImport("OpenCL")] public static extern Error clEnqueueNDRangeKernel(OpenCLCommandQueue command_queue, OpenCLKernel kernel, Int32 work_dim, [In] IntPtr[] global_work_offset, [In] IntPtr[] global_work_size, [In] IntPtr[] local_work_size, Int32 num_events_in_wait_list, [In] OpenCLEvent[] event_wait_list, out OpenCLEvent e);

用下面的代码调用:

OpenCLEvent e;
OpenCLDriver.clEnqueueNDRangeKernel(CommandQueue.OpenCLCommandQueue, OpenCLKernel, globalWorkSize.Length, globalWorkOffset, globalWorkSize, localWorkSize, eventWaitList.Count, eventWaitList.OpenCLEventArray, out e);
return null;

例如CommandQueue。OpenCLCommandQueue和其他参数是普通的属性或变量,不会泄漏内存,它们背后没有代码。

我不明白如何可以clEnqueueNDRangeKernel调用泄漏内存?我错过什么了吗?

为什么这行代码会泄漏内存?

似乎有一个内存泄漏问题在OpenCL与clEnqueueNDRangeKernel已知自2009年以来,固定2010…

http://www.opentk.com/node/1541?page=3
http://forums.amd.com/devforum/messageview.cfm?catid=390& threadid = 122161, highlight_key = y

可以添加

clFinish(CommandQueue);

clEnqueueNDRangeKernel