致命信号11(Sigsegv)在0x00000000处(代码=1)?

15

为什么会出现这个问题?

public static String path;
private VideoView mVideoView;


mVideoView = (VideoView) findViewById(R.id.surface_view);
mVideoView.setVideoPath(path);
mVideoView.setMediaController(new MediaController(this));
mVideoView.requestFocus();

//...

    private int mLayout = VideoView.VIDEO_LAYOUT_ZOOM;

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        if (mVideoView != null)
            mVideoView.setVideoLayout(mLayout, 0);
        super.onConfigurationChanged(newConfig);
    }

这是错误


1
哪一行导致了错误?使用调试器逐步执行并隔离有问题的那一行。 - Aleks G
1
我不知道这不是我的代码错误。当我打开我的应用程序时,首先会打开视频,然后在1秒钟后关闭并显示错误。但是我的应用程序没有强制关闭,只有视频关闭。 - CompEng
2
你找到解决方案了吗?我特别关心原因... - Marvin Emil Brach
我找不到解决方案。 - CompEng
谢谢@Drew,我会调查的,感谢。 - CompEng
显示剩余8条评论
5个回答

7
您看到的错误信息是由于在本地代码中取消引用空指针所致。从您展示的内容来看,很难猜测可能的原因。
如果我是您,我会仔细检查是否将空引用传递给系统或库方法。

5
如Nicola所提到的,这很可能是在本地代码中取消引用空指针导致的。我遇到过类似的问题,并通过调试堆栈跟踪解决了它。
如果您关闭日志筛选器,则将看到整个堆栈跟踪。 这将为您提供详细信息,包括崩溃发生的位置。 我使用以下Python脚本以查找确切原因; https://code.google.com/p/android-ndk-stacktrace-analyzer/wiki/Usage 在我的情况下,由于运行自定义Android版本,会发生null指针。
祝好运

我不知道这不是我的代码错误。当我打开我的应用程序时,首先会打开视频,然后在1秒钟后关闭并显示错误。但是我的应用程序没有强制关闭,只有视频关闭。 - CompEng
1
很可能是您的VideoView代码在本地代码中引起了问题。 您真的需要完整的本地堆栈跟踪才能理解为什么会发生这种情况。 - Lunar
抱歉,我不理解,我的代码有问题吗?因为我只是设置了路径。当我在电脑上的 Web 浏览器中查看它时,路径可以正常运行,但是当我想在我的应用程序中查看它时,出现了问题。 - CompEng
谢谢您的回答,您认为这个错误是由于我的代码引起的吗? - CompEng
2
这个建议“如果在您的 Logcat 中关闭过滤,您将看到整个堆栈跟踪。”帮了我大忙。 - MDrabic
显示剩余4条评论

4
很可能是线程问题……我曾经也遇到过Fatal Signal 11的情况,当时我在错误的线程上执行了一些操作……
可能是你在onConfigurationChanged()实现中调用了setVideoLayout()。
但如果你能贴出更多的代码,将会更有帮助。

1
你能详细说明一下吗?我正在尝试调试别人的代码中的SIGSEGV错误,但是不知道哪部分代码有问题。 - Andrew Wyld

0

当我使用两个TextureViews(即按下Home按钮)结束我的活动时,我遇到了类似的问题:

Fatal signal 11 (SIGSEGV), code 1, fault addr 0xa4680000 in tid 29013 (pool-4-thread-1)

logcat 显示 segv 出现在 drawXXX 函数内部。因此,我尝试在 surface 被销毁时不进行绘制:

private synchronized void doDraw(Canvas canvas) {
...
}

doDraw()会被后台线程定期调用。准确地说,使用ScheduledExecutorService。这个东西在销毁监听器中停止,该监听器还获得了同步关键字:

public synchronized boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
    executorService.shutdownNow();
    return true;
}

这可以保证只有在当前没有绘制任何内容时才能销毁表面。

现在离开活动不会再出现崩溃了!

我觉得没有人使用TextureViews,而是使用SurfaceViews。不幸的是,后者在某些设备上绘制半透明图形时存在一些问题,这就是为什么我转向TextureView的原因。

希望这可以帮到你。


0

我在使用三星Galaxy Tab 2浏览任何WiX网站时遇到了同样的问题:

Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)

然后整个应用程序就退出了。

经过更多的研究,我发现有一篇帖子谈到了一个ROM BUG。所以,我插上手机并使用F11(eclipse)编译相同的代码。结果...它可以工作!但是我的平板电脑仍然出现错误。

平板电脑: 三星Galaxy Tabg 2 GT-P5100 ANDROID 4.0.3 KERNEL 3.0.8

手机: 三星Galaxy Young DUOS(虽然旧但固件已更新) GT-S6102B ANDROID 4.4.2 KERNEL 2.6.35.7

在我的手机上可以正常工作,但在平板电脑上加载任何使用WiX工具制作的网站时会崩溃。

好的信息在这里:谷歌+链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接