- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
通过 LWJGL 使用 opencl 时,我收到以下错误消息:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000002201971, pid=8476, tid=8920
#
# JRE version: 7.0_03-b05
# Java VM: Java HotSpot(TM) 64-Bit Server VM (22.1-b02 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C [OpenCL.dll+0x1971]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# V:\Documents\NetBeansProjects\LWJGL\hs_err_pid8476.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.sun.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
我正在使用的源代码:
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.*;
import java.util.List;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.vecmath.Point3f;
import org.lwjgl.*;
import static org.lwjgl.opencl.CL10.*;
import org.lwjgl.opencl.*;
public class RayTracer {
public static void main(String[] args) throws Exception {
LoadSource();
RayTracer rayTracer = new RayTracer();
rayTracer.CLRender();
}
JFrame frame;
BufferedImage scene;
Sphere sphere;
static final float SAMPLES = 4f;
Graphics graphics;
BufferStrategy bufferSrategy;
final AtomicBoolean redraw = new AtomicBoolean();
IntBuffer temp;
static String source = "";
RayTracer() throws LWJGLException {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
frame.createBufferStrategy(2);
bufferSrategy = frame.getBufferStrategy();
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gd.getDefaultConfiguration();
scene = gc.createCompatibleImage((int) (frame.getWidth()), (int) (frame.getHeight()));
sphere = new Sphere();
sphere.location = new Point3f(0, 0, -5);
startDrawThread();
}
void CLRender() throws LWJGLException {
// initialization
CL.create();
CLPlatform platform = CLPlatform.getPlatforms().get(0);
List<CLDevice> devices = platform.getDevices(CL_DEVICE_TYPE_GPU);
CLContext context = CLContext.create(platform, devices, null, null, null);
CLCommandQueue queue = clCreateCommandQueue(context, devices.get(0), CL_QUEUE_PROFILING_ENABLE, null);
// program/kernel creation
CLProgram program = clCreateProgramWithSource(context, source, null);
try {
Util.checkCLError(clBuildProgram(program, devices.get(0), "", null));
//check for problem
} catch (OpenCLException e) {
ByteBuffer buffer = BufferUtils.createByteBuffer(1024 * 40);
buffer.rewind();
PointerBuffer pb = PointerBuffer.allocateDirect(1);
Util.checkCLError(clGetProgramBuildInfo(program, devices.get(0), CL_PROGRAM_BUILD_STATUS, buffer, null));
switch (buffer.get(0)) {
case CL_BUILD_NONE:
System.out.println("build none");
break;
case CL_BUILD_ERROR:
System.out.println("build error");
break;
case CL_BUILD_IN_PROGRESS:
System.out.println("build in progress");
break;
case CL_BUILD_SUCCESS:
System.out.println("build successful");
break;
}
buffer.rewind();
Util.checkCLError(clGetProgramBuildInfo(program, devices.get(0), CL_PROGRAM_BUILD_LOG, buffer, pb));
print(buffer, pb.get());
System.exit(1);
}
// set kernel
CLKernel kernel = clCreateKernel(program, "trace", null);
final int width = scene.getWidth();
final int height = scene.getHeight();
FloatBuffer sphereRadius, sphereLocation, light, imageDim, samples;
IntBuffer color;
Light movingLight = new Light(new Point3f(), Color.ORANGE);
movingLight.activate();
try {
for (float z = 0;; z += .01f) {
//set Ligh Poition
movingLight.position = new Point3f(-.5f, (float) (10 * Math.cos(z)), (float) (10 * Math.sin(z)));
//Put data in Buffers
float[] lights = Light.getLights();
sphereRadius = toFloatBuffer(new float[]{sphere.radius.x, sphere.radius.y, sphere.radius.z});
sphereLocation = toFloatBuffer(new float[]{sphere.location.x, sphere.location.y, sphere.location.z});
light = toFloatBuffer(lights);
imageDim = toFloatBuffer(new float[]{width, height, -1f});
samples = toFloatBuffer(new float[]{SAMPLES});
color = toIntBuffer(new int[width * height]);
// send to open CL
CLMem sphereRadiusMem = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sphereRadius, null);
clEnqueueWriteBuffer(queue, sphereRadiusMem, 1, 0, sphereRadius, null, null);
CLMem lightMem = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, light, null);
clEnqueueWriteBuffer(queue, lightMem, 1, 0, light, null, null);
CLMem imageDimMem = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, imageDim, null);
clEnqueueWriteBuffer(queue, imageDimMem, 1, 0, imageDim, null, null);
CLMem samplesMem = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, samples, null);
clEnqueueWriteBuffer(queue, samplesMem, 1, 0, samples, null, null);
CLMem sphereLocationMem = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sphereLocation, null);
clEnqueueWriteBuffer(queue, sphereLocationMem, 1, 0, sphereLocation, null, null);
CLMem colorMem = clCreateBuffer(context, CL_MEM_WRITE_ONLY | CL_MEM_COPY_HOST_PTR, color, null);
// execution
PointerBuffer kernel1DGlobalWorkSize = BufferUtils.createPointerBuffer(2);
kernel1DGlobalWorkSize.put(0, width);
kernel1DGlobalWorkSize.put(1, height);
kernel.setArg(0, sphereRadiusMem);
kernel.setArg(1, sphereLocationMem);
kernel.setArg(2, lightMem);
kernel.setArg(3, imageDimMem);
kernel.setArg(4, samplesMem);
kernel.setArg(5, colorMem);
clEnqueueNDRangeKernel(queue, kernel, 2, null, kernel1DGlobalWorkSize, null, null, null);
// read the results back
clEnqueueReadBuffer(queue, colorMem, 1, 0, color, null, null);
//transfer to Image
setScene(color);
//clean up memory
clReleaseMemObject(colorMem);
clReleaseMemObject(imageDimMem);
clReleaseMemObject(lightMem);
clReleaseMemObject(samplesMem);
//clReleaseMemObject(sphereLocationMem); //uncomenting results in nasty error
clReleaseMemObject(sphereLocationMem);
clReleaseMemObject(sphereRadiusMem);
}
} finally {
// teardown
clFinish(queue);
clReleaseKernel(kernel);
clReleaseProgram(program);
clReleaseCommandQueue(queue);
CL.destroy();
}
}
}
在底部附近,您将看到一个带注释的 clReleaseMemObject(sphereLocationMem);
当取消注释时,我会收到错误消息。如果我留下评论,它就可以正常工作。所有其他对 clReleaseMemory() 的调用都工作正常,为什么这个会抛出错误?
最佳答案
当指定行取消注释时,
SphereLocationMem
被释放两次,位于:
//clReleaseMemObject(sphereLocationMem); //uncomenting results in nasty error
clReleaseMemObject(sphereLocationMem);
导致指示的访问冲突。对该行进行注释后,它很可能工作正常。
关于java - 尝试释放内存时出现 EXCEPTION_ACCESS_VIOLATION (0xc0000005),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14147639/
我在使用 JavaFX 桌面应用程序时遇到问题,特别是在 3D 渲染功能方面。每次我尝试构建和启动 JavaFX 应用程序时,JVM 都会崩溃,并且会收到类似于以下错误的错误: # # A fatal
所以我正在使用 JavaCV 并尝试从 mp4 文件中捕获帧作为图像。当我尝试保存图像并且无法在任何地方找到解决方案时,我不断收到 EXCEPTION_ACCESS_VIOLATION。 OpenCV
我正在开发一个eclipse插件,并使用eclipse应用程序运行/调试配置来运行它以进行测试。自从我更改为JDK1.8以来,嵌套的Eclipse应用程序崩溃了。如果尝试使用ctrl + click从
当我尝试从 Openbravo POS 打印票据时出现此 hs_err_pid: # # A fatal error has been detected by the Java Runtime Env
当我使用 eclipse 运行我的项目的 java bean 时,我得到了这个崩溃报告。我完全不知道它是什么以及如何调试。谁能告诉我调试这个的可能方法? # # An unexpected error
我用JNA在libpotrace.dll中调用了这个函数,这个函数是: potrace_state_t *potrace_trace(const potrace_param_t *param, con
我正在创建一个小实用程序,用于使用 jpcap 将各种数据有效负载写入 pcap 转储文件。对于每个有效负载,我都按照“通过网络接口(interface)发送数据包”示例中的描述创建一个数据包并发送它
这是我尝试安装MATLAB时Java运行时环境返回的完整错误消息: # A fatal error has been detected by the Java Runtime Environme
我是 JNI 的新手,正在尝试使用 Windows 7 和 cygwin 的 gcc 编译器创建一个简单的 Hello World 程序。这是各种组件: 你好.java: public class H
我正在通过 JNA 使用 C++ DLL。我想在Java中调用下面的方法,将我想读取的信息写入szVisor。 long FAR PASCAL DLL_GetLocalPortTS(char* szE
我刚刚下载了 Blender 2.75a,它所做的只是打开一个控制台窗口,显示“错误:EXCEPTION_ACCESS_VIOLATION” 控制台窗口不会关闭,也不会随任务管理器一起退出,当我尝试结
通过 LWJGL 使用 opencl 时,我收到以下错误消息: # # A fatal error has been detected by the Java Runtime Environment:
我们在我们自己的测试工具(基于 Java 的)中运行我们的测试集......随机测试失败......我们得到以下 JVM 失败错误......请帮助...... A fatal error has b
我的 Java UI 意外终止并转储了一个 hs_err_pid 文件。该文件显示“崩溃发生在本地代码的 Java 虚拟机之外”。 JNA 是我们使用的唯一本地代码。有谁知道任何可能导致此问题的 JN
我正在尝试实现一种使用 OpenGL 和 Java 中的 vertexBufferObjects 绘制一堆立方体的方法,但是在调用 glDrawArrays 命令时遇到了问题。 本质上,该程序所做的是
我可能在 Java 中遇到了一个奇怪的错误。当我运行以下代码时,出现“EXCEPTION_ACCESS_VIOLATION”异常。 我知道代码没有意义(就逻辑而言),因为它是我最初编写的代码的子集。如
我目前正在尝试按照名为“学习 Libgdx 游戏开发”的书中的教程来学习 libGdx,并发现了一个奇怪的错误。 有一个名为 backToMenu 的函数: private void backToMe
今天在工作中,我的 eclipse 开始反复崩溃。打开它并开始编辑文件就足以在几分钟后崩溃。我重新安装了所有东西:Eclipse、Workspace、Java,但没有任何帮助。请尝试找出问题的根源,因
我一直在尝试让我的公司软件 (HP Operations Orchestra) 在重新安装后运行很多次,但我无法打开它。相反,它会在其目录中生成一个错误日志文件,其中包含以下内容: # # A fat
今天,我决定继续开发我为计算机科学类(class)创建的程序。运行它后,我在控制台中看到了这个: # # A fatal error has been detected by the Java Run
我是一名优秀的程序员,十分优秀!