Android 치명적인 신호 11
Android에서 개발중인 앱에서 Fatal Signal 11 오류가 계속 발생합니다.
메모리에 액세스하는 방식과 관련이 있다고 생각하지만 원인을 파악할 수 없습니다.
어떤 도움이라도 대단히 감사하겠습니다!
LogCat은 다음과 같습니다.
05-02 23:47:17.618: D/dalvikvm(590): GC_FOR_ALLOC freed 68K, 4% free 6531K/6787K, paused 101ms
05-02 23:47:17.638: I/dalvikvm-heap(590): Grow heap (frag case) to 7.619MB for 1228816-byte allocation
05-02 23:47:17.738: D/dalvikvm(590): GC_CONCURRENT freed 1K, 4% free 7730K/8007K, paused 5ms+14ms
05-02 23:47:17.878: D/dalvikvm(590): GC_FOR_ALLOC freed <1K, 4% free 7730K/8007K, paused 37ms
05-02 23:47:17.888: I/dalvikvm-heap(590): Grow heap (frag case) to 8.790MB for 1228816-byte allocation
05-02 23:47:17.998: D/dalvikvm(590): GC_CONCURRENT freed <1K, 4% free 8930K/9223K, paused 4ms+4ms
05-02 23:47:17.998: A/libc(590): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)
다른 클래스 내에서 초기화되지 않은 Canvas를 호출하려고 했으므로 높이나 너비를 얻으려고 할 때 충돌이 발생했습니다.
android.media.MediaRecorder의 인스턴스와 동일한 문제가 발생했습니다.
액세스 코드 #getMaxAmplitude()
후 #reset()
와 #release()
MediaRecorder 인스턴스에서 호출되었다.
오늘 아침에 동일한 문제가 발생하여 drawable-mdpi 폴더에 800 픽셀 너비의 이미지를 실수로 저장하는 것을 추적 할 수있었습니다. 무슨 일이 일어 났는지 깨달았을 때 나는 잠깐 만져 보았다. 파일 크기와 관련이 있는지 확인하기 위해 압축을 시도했지만 그렇지 않았습니다. 그런 다음 다시 650 픽셀 너비로 저장하려고 시도했는데 해당 폴더에서 작동했습니다. 그래서 그 사이 어딘가에 내가 추측하는 모든 폴더에 대한 중단 점이 있습니다. 그런 다음 800p 와이드 이미지를 의도 한 hdpi 폴더에 넣고 480p 와이드를 mdpi에 넣고 수정했습니다.
나는 똑같은 문제가 있었고 아침에 잠을 잘 자고 커피를 마신 후 초기화되지 않은 비트 맵으로 캔버스를 뒷받침하기에 충분히 어리석은 것을 발견했습니다. 캔버스 그리기 코드가 모두 네이티브 코드는 아니지만 초기화되지 않은 개체의 전달은 모든 곳에서 감지되지 않는 것 같습니다.
널 주소 (0x00000000)가있는 SIGSEGV는 애플리케이션이 널 포인터를 역 참조했음을 의미하므로 널 포인터 (즉, 처음에 인스턴스화하지 않은 객체 인스턴스에 대한 빈 참조)를 지원되는 코드에 전달하는 위치를 찾으십시오. 이 오류를 제대로 확인하지 않습니다.
Canvas 클래스를 사용하는 동안 동일한 치명적인 오류가 발생했습니다.
내 코드는 다음과 같습니다. 다음 코드는 Arc를 초기화하고 캔버스에 그립니다.
private RectF r1 = null;
private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
public Arc(Context ctx) {
super(ctx);
mPaint.setColor(0xFFFF0000);
r1 = new RectF(200, 200, 400, 400);
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawArc(r1, 0, 90, true, mPaint);
}
RectF의 인스턴스가 초기화되지 않아 NullPointerException 및 치명적인 오류가 발생했기 때문에 문제가 발생했습니다.
안드로이드에서 cocos2d-x 앱을 만들 때이 문제가 발생했습니다. 문제는 내 레이어가 CCLayer라는 것입니다.
CCLayer::init()
하지만 헤더 파일에는 다음이 있습니다.
class HelloWorld : public cocos2d::CCLayerColor
CCLayerColor를 CCLayer로 변경했는데 내 앱이 작동했습니다.
Android 용 LibGDX 프레임 워크를 사용하여 게임을 개발하는 동안 저에게도 동일한 일이 발생했으며 그 이유는 다음과 같습니다.
나는이 화면이 - GameScreen
와 BattleScreen
. GameScreen
맵에서 캐릭터를 움직이는 곳입니다. 적 스프라이트와 충돌하면 즉시 사용 game.setScreen(new BattleScreen(this))
하고 현재 화면을 BattleScreen
. 여기서 Fatal Signal 11이 발생했던 곳입니다. 처음에는 자산 관리자 인스턴스가 정적이기 때문에 자산로드와 관련이 있다고 생각했습니다. 여러 가지로드 방법을 시도했지만 아무것도 작동하지 않았습니다. 내가 잘못된 곳에서 화면을 바꾸고 있다는 것이 밝혀졌습니다. 내 위해 GameScreen
내가 가진 WorldController
및 WorldRenderer
인스턴스입니다. 내가 사용하고 있었다 worldController.update()
과 worldRenderer.render()
내부 GameScreen
의 render(float deltaTime)
방법. 내부worldController.update()
나는 충돌을 확인하고 적과 하나를 발견하자마자 화면을 변경했습니다. Android에는 좋지 않았습니다. 업데이트와 렌더링 사이에 발생했거나 업데이트가 실행되는 동안 시간이 걸리고 충돌이 발생했기 때문일 수 있습니다. 모르겠습니다. 그러나 여기에 내가 그것을 고친 방법이 있습니다.
- 내부에 부울 플래그 (기본적으로 false)를 추가했고
WorldController
적과의 충돌이 발생할 때마다 true로 설정했습니다. - 에
GameScreen
이야 'render()
내가이 플래그를 확인했다 - 그것이 사실이라면 나는 화면을 바꿀 것BattleScreen
, 그렇지 않으면 나는 업데이트하고 렌더링 것GameScreen
이제는 매번 완벽하게 작동하며 치명적 신호 오류 11이 전혀 없습니다.
여기 제이다 GameScreen
의 render()
방법은 :
@Override
public void render(float deltaTime) {
if(worldController.isCollisionWithEnemy()) {
game.setScreen(game.battleScreen);
} else {
if(!paused) {
worldController.update(deltaTime);
}
Gdx.gl.glClearColor(57.0f / 255.0f, 181.0f / 225.0f, 115.0f / 255.0f, 1.0f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
worldRenderer.render();
}
}
In my case, it was a null pointer exception inside an onDraw event that prevent the draw to be completed on the canvas. I think is a general error message given when a draw problem ocurr.
I too had this error when using Libgdx for android, and I found out this error is caused by Box2d which uses native code, it is better to look at part of your code which uses Box2d and see if there is any null pointers.
In my case the BluetoothSocket
was null when trying to establish a Bluetooth connection
참고URL : https://stackoverflow.com/questions/10423128/android-fatal-signal-11
'Development Tip' 카테고리의 다른 글
C #에서 인터페이스 기반 프로그래밍을 사용한 연산자 오버로딩 (0) | 2020.10.27 |
---|---|
상품 리뷰를 검색하는 Amazon.com API가 있습니까? (0) | 2020.10.27 |
html 양식 태그의 목적은 무엇입니까 (0) | 2020.10.27 |
SQL Server 데이터베이스에서 UTF-8 데이터 정렬을 사용하는 방법은 무엇입니까? (0) | 2020.10.27 |
가져올 진행률 표시기를 업로드 하시겠습니까? (0) | 2020.10.27 |